Mac Docker 建立第一個Django 應用,Part 1

Mac Docker 建立第一個Django 應用, Part 1

第一步:在Mac構建Django 容器

原文:Quickstart: Compose and Django
翻譯整理:CKpython

這篇文章將指導你如何用Docker Compose 配置和啓動一個簡單的 Django + PostgreSQL 應用。請先確保您已安裝Compose:
Install Docker Composeweb

定義您的項目組件sql

您須要建立一個Dockerfile 和一個Python 依賴文件,以及一個docker-compose.yml文件docker

  1. 建立一個項目目錄
  2. 建立一個新的Dockerfile在當前項目目錄下
  3. 添加內容到Dockerfile
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
  1. 保存Dockerfile
  2. 建立一個 requirements.txt

Dockerfile 中的 RUN pip install -r requirements.txt 將會用到它數據庫

  1. 添加所需的軟件到requirements.txt
Django>=1.8,<2.0
psycopg2
  1. 保存requirements.txt
  2. 建立一個docker-compose.yml

docker-compose.yml文件裏描述了您的app所須要的服務。compose一詞我認爲翻譯爲編制更恰當。在這裏咱們須要一個web服務器,一個數據服務器。編制文件指明瞭咱們這些服務所用的鏡像,他們如何鏈接,哪些卷要掛載到容器。最後定義服務端口。django

version: '3'

services:
  db:
    image: postgres
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
  1. 保存 docker-compose.yml

建立一個Django項目瀏覽器

  1. 轉到項目根目錄
  2. 用docker-compose 建立項目
docker-compose run web django-admin.py startproject composeexample .

docker將啓動web容器,並在裏面執行 django-admin.py startproject composeexample,由於web鏡像不存在因此compose先從當前目錄創建它,見 build: 由於掛在了當前目錄,因此新建立的項目文件在docker-compose run執行完推出後能夠看到服務器

  1. ls 項目目錄
$ ls -l
 drwxr-xr-x 2 root   root   composeexample
 -rw-rw-r-- 1 user   user   docker-compose.yml
 -rw-rw-r-- 1 user   user   Dockerfile
 -rwxr-xr-x 1 root   root   manage.py
 -rw-rw-r-- 1 user   user   requirements.txt

鏈接數據庫app

  1. 打開composeexample/settings.py
  2. 替換DATABASE = …項
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}

這些參數是根據docker-compose.yml所指定的postgres Docker 鏡像決定的。tcp

  1. 保存
  2. 執行docker-compose up
$ docker-compose up
djangosample_db_1 is up-to-date
Creating djangosample_web_1 ...
Creating djangosample_web_1 ... done
Attaching to djangosample_db_1, djangosample_web_1
db_1   | The files belonging to this database system will be owned by user "postgres".
db_1   | This user must also own the server process.
db_1   |
db_1   | The database cluster will be initialized with locale "en_US.utf8".
db_1   | The default database encoding has accordingly been set to "UTF8".
db_1   | The default text search configuration will be set to "english".

. . .

web_1  | May 30, 2017 - 21:44:49
web_1  | Django version 1.11.1, using settings 'composeexample.settings'
web_1  | Starting development server at http://0.0.0.0:8000/
web_1  | Quit the server with CONTROL-C.

此時,你的Django app應該運行在8000端口上了。瀏覽器打開http://localhost:8000應該能看到
image

  1. 列出全部容器:
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
def85eff5f51        django_web          "python3 manage.py..."   10 minutes ago      Up 9 minutes        0.0.0.0:8000->8000/tcp   django_web_1
678ce61c79cc        postgres            "docker-entrypoint..."   20 minutes ago      Up 9 minutes        5432/tcp                 django_db_1
  1. 關閉容器

Ctrl-C
或者新開一個terminal執行: docker-compose down

部署已有的項目到容器

  1. 將docker-compose.yml requirements.txt Dockerfile 拷貝到Django項目的根目錄,應與manage.py同目錄
  2. 運行docker-compose up
相關文章
相關標籤/搜索