萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> Linux系統使用Docker開發Django項目教程

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

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

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

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

  一個 Web/ Django 的容器

  一個 Nginx 的容器

  一個 Postgres 的容器

  一個 Redis 的容器

  一個 Data 容器

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

  本地設置

  使用 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 的容器運行起來。 上一頁1234下一頁共4頁

  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。 上一頁12 34下一頁共4頁

  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:

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

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

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

  $ 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

copyright © 萬盛學電腦網 all rights reserved