原文:Quickstart: Compose and Django
翻譯整理:CKpython
這篇文章將指導你如何用Docker Compose 配置和啓動一個簡單的 Django + PostgreSQL 應用。請先確保您已安裝Compose:
Install Docker Composeweb
定義您的項目組件sql
您須要建立一個Dockerfile 和一個Python 依賴文件,以及一個docker-compose.yml文件docker
FROM python:3 ENV PYTHONUNBUFFERED 1 RUN mkdir /code WORKDIR /code ADD requirements.txt /code/ RUN pip install -r requirements.txt ADD . /code/
Dockerfile 中的 RUN pip install -r requirements.txt
將會用到它數據庫
Django>=1.8,<2.0 psycopg2
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
建立一個Django項目瀏覽器
docker-compose run web django-admin.py startproject composeexample .
docker將啓動web容器,並在裏面執行 django-admin.py startproject composeexample,由於web鏡像不存在因此compose先從當前目錄創建它,見 build: 由於掛在了當前目錄,因此新建立的項目文件在docker-compose run
執行完推出後能夠看到服務器
$ 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
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'postgres', 'USER': 'postgres', 'HOST': 'db', 'PORT': 5432, } }
這些參數是根據docker-compose.yml所指定的postgres Docker 鏡像決定的。tcp
$ 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應該能看到
$ 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
Ctrl-C
或者新開一個terminal執行: docker-compose down
docker-compose up