歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux維護 >> Linux系統使用Docker開發Django項目教程

Linux系統使用Docker開發Django項目教程

日期:2017/3/2 10:25:33   编辑:Linux維護

在Linux系統中Docker是一個應用開發平台,可以把應用在Docker上打包,然後在Linux Docker上運行調試。而且目前Docker是Linux最火熱的軟件發布器之一了。本文就來介紹一下Linux系統使用Docker開發Django項目教程。

通過 Docker Machine 「系統配置」和 Docker Compose 「多容器應用組裝」 提供堆棧可以完成 Postgres, Redis 和 Django 項目相結合的開發。

而在最後,該堆棧將包括如下每個服務的單獨的容器:

一個 Web/ Django 的容器

一個 Nginx 的容器

一個 Postgres 的容器

一個 Redis 的容器

一個 Data 容器

本地設置

使用 Docker「v1.6.1」版本我們將使用到 Docker Compose 「v1.2.0」編排一個多容器組成的應用程序,使用 Docker Machine「v0.2.0」創建本地和雲的 Docker 主機。 按照指示,分別安裝 Docker Compose 和 Machine,然後測試安裝結果:

$ docker-machine --version

docker-machine version 0.2.0 (8b9eaf2)

$ docker-compose --version

docker-compose 1.2.0

接下來,根據以下項目結構從realpython/dockerizing-django克隆一份項目或自己創建項目:

├── docker-compose.yml

├── nginx

│ ├── Dockerfile

│ └── sites-enabled

│ └── django_project

├── production.yml

└── web

│ ├── Dockerfile

│ ├── docker_django

│ │ ├── __init__.py

│ │ ├── apps

│ │ │ ├── __init__.py

│ │ │ └── todo

│ │ │ ├── __init__.py

│ │ │ ├── admin.py

│ │ │ ├── models.py

│ │ │ ├── templates

│ │ │ │ ├── _base.html

│ │ │ │ └── home.html

│ │ │ ├── tests.py

│ │ │ ├── urls.py

│ │ │ └── views.py

│ │ ├── settings.py

│ │ ├── urls.py

│ └── wsgi.py

│ ├── manage.py

│ ├── requirements.txt

│ └── static

│ │ └── main.css《/code》

現在我們准備容器運行……

Docker Machine

開啟 Docker Machine,只需運行:

$ docker-machine create -d virtualbox dev;

INFO[0000] Creating CA: /Users/michael/.docker/machine/certs/ca.pem

INFO[0000] Creating client certificate: /Users/michael/.docker/machine/certs/cert.pem

INFO[0001] Downloading boot2docker.iso to /Users/michael/.docker/machine/cache/boot2docker.iso.。。

INFO[0035] Creating SSH key.。。

INFO[0035] Creating VirtualBox VM.。。

INFO[0043] Starting VirtualBox VM.。。

INFO[0044] Waiting for VM to start.。。

INFO[0094] “dev” has been created and is now the active machine.

INFO[0094] To point your Docker client at it, run this in your shell: eval “$(docker-machine env dev)”

這個 create 命令設置一個新的 Machine「開發環境」。實際上,它是下載 Boot2Docker 並開始運行 VM。現在只要在開發環境下指定 Docker:

$ eval “$(docker-machine env dev)”

運行以下命令來查看當前正在運行的機器:

$ docker-machine ls

NAME ACTIVE DRIVER STATE URL

dev * virtualbox Running tcp://192.168.99.100:2376

接下來,我們會讓 Django,Postgres 和 Redis 的容器運行起來。

Docker Compose

讓我們看一看 docker-compose.yml 文件:

web:

restart: always

build: 。/web

expose:

- “8000”

links:

- postgres:postgres

- redis:redis

volumes:

- /usr/src/app/static

env_file: .env

command: /usr/local/bin/gunicorn docker_django.wsgi:application -w 2 -b :8000

nginx:

restart: always

build: 。/nginx/

ports:

- “80:80”

volumes:

- /www/static

volumes_from:

- web

links:

- web:web

postgres:

restart: always

image: postgres:latest

volumes_from:

- data

ports:

- “5432:5432”

redis:

restart: always

image: redis:latest

ports:

- “6379:6379”

data:

restart: always

image: postgres:latest

volumes:

- /var/lib/postgresql

command: true

在這裡,我們定義了五個服務: Web、Nginx、Postgres、Redis 和 Data。

Web 服務通過 「Web」 目錄下的 Dockerfile 來進行構建,這裡也設置了 Python 環境設置,Django 應用默認8000端口。這個端口之後轉發到主機環境的80端口上–例如,Docker Machine。Web 服務還在容器 Restore.env 文件中增加了環境變量。

Nginx 服務用於反向代理,作用於 Django 或靜態文件目錄。

Postgres 服務是從 Docker Hub 的官方 PostgreSQL鏡像 安裝,安裝 Postgres 後運行在默認的服務器的5432端口。

Redis 使用官方 Redis鏡像 安裝,默認 Redis 服務是運行在6379端口。

最後,注意有一個單獨的容器來存儲數據庫數據,即為 Data。這有助於確保即使 Postgres 容器完全摧毀數據仍然存在。

現在,運行容器,構建鏡像,然後開始服務:

$ docker-compose build

$ docker-compose up -d

這時可以有時間喝一杯咖啡或走走路,因為你第一次運行它將需要一段時間,隨後就可以從 Docker 緩存中建立運行更快的了。

一旦服務運行,我們就需要創建數據庫遷移:

$ docker-compose run web /usr/local/bin/python manage.py migrate

獲得 Docker Machine 的相關 IP, – docker-machine ip –,然後在您的浏覽器中輸入IP:

出現上圖後刷新,您應該能看到頁面更新。從本質上講,我們使用 Redis INCR 來遞增每個處理請求,查看web/docker_django/apps/todo/views.py 代碼以獲得更多信息。

同樣,這創造了五項服務,都在不同的容器中運行:

$ docker-compose ps

Name Command State Ports

----------------------------------------------------------------------------------------------

dockerizingdjango_data_1 /docker-entrypoint.sh true Up 5432/tcp

dockerizingdjango_nginx_1 /usr/sbin/nginx Up 0.0.0.0:80-》80/tcp

dockerizingdjango_postgres_1 /docker-entrypoint.sh postgres Up 0.0.0.0:5432-》5432/tcp

dockerizingdjango_redis_1 /entrypoint.sh redis-server Up 0.0.0.0:6379-》6379/tcp

dockerizingdjango_web_1 /usr/local/bin/gunicorn do 。。. Up 8000/tcp

要查看哪些環境變量可用於 Web 服務,運行:

$ docker-compose run web env

要查看日志,運行:

$ docker-compose logs

您也可以進入 Postgres Shell - - 因為我們已經通過 docker-compose.yml 文件設置在數據庫中通過添加用戶/角色,端口轉發到主機環境中:

$ psql -h 192.168.99.100 -p 5432 -U postgres --password

准備部署?先停止運行 docker-compose stop,然後讓我們的應用程序在雲中運行!

部署

與我們在本地運行應用程序一樣,我們現在可以 push 到與 Docker Machine 環境完全相同的雲托管服務提供商。現在讓我們部署到 Digital Ocean 中。

您注冊 Digital Ocean 之後,產生個人訪問令牌 「Personal Access Token」,然後運行以下命令:

$ docker-machine create \

-d digitalocean \

--digitalocean-access-token=ADD_YOUR_TOKEN_HERE \

Production

這將需要幾分鐘時間來提供 droplet , 並設置一個新的 Docker Machine 產品環境:

INFO[0000] Creating SSH key.。。

INFO[0001] Creating Digital Ocean droplet.。。

INFO[0133] “production” has been created and is now the active machine.

INFO[0133] To point your Docker client at it, run this in your shell: eval “$(docker-machine env production)”

現在我們有兩台機器運行,一是在本地,一個在 Digital Ocean:

$ docker-machine ls

NAME ACTIVE DRIVER STATE URL

dev * virtualbox Running tcp://192.168.99.100:2376

production digitalocean Running tcp://104.131.107.8:2376

設置 production 為激活機器並加載 Docker 環境到 shell:

$ docker-machine active production

$ eval “$(docker-machine env production)”

最後,讓我們在雲上再次構建 Django 的應用程序。這時候我們就需要使用一個稍微不同的 Docker Compose 文件,不需要安裝在容器裡。為什麼呢?因為容器本身非常適合本地開發,這樣我們可以更新「Web」目錄的本地代碼,並且更改代碼立刻對容器產生影響。在生 產中,很明顯沒有這個必要。

$ docker-compose build

$ docker-compose up -d -f production.yml

$ docker-compose run web /usr/local/bin/python manage.py migrate

獲取與 Digital Ocean 帳戶相關聯的 IP 地址,並在浏覽器中查看它。如果一切順利,你應該可以看到你的應用程序在運行。

以上就是Linux系統使用Docker開發Django項目教程了,配置完Docker後就可以在Docker上面輕松地進行Django項目開發了。

Copyright © Linux教程網 All Rights Reserved