?
This document uses PHP Chinese website manual Release
本快速入門指南演示了如何使用Docker Compose來設(shè)置和運行簡單的Django / PostgreSQL應(yīng)用程序。在開始之前,您需要安裝Compose。
對于這個項目,你需要創(chuàng)建一個Dockerfile,一個Python依賴關(guān)系文件和一個docker-compose.yml
文件。(您可以使用此文件的擴展名.yml
或.yaml
擴展名。)
創(chuàng)建一個空的項目目錄。您可以為該目錄命名一些容易記憶的內(nèi)容。該目錄是應(yīng)用程序映像的上下文。該目錄應(yīng)該只包含構(gòu)建該映像的資源。
Dockerfile
在您的項目目錄中創(chuàng)建一個新文件。Dockerfile通過一個或多個配置該映像的構(gòu)建命令來定義應(yīng)用程序的映像內(nèi)容。一旦建成,你可以在一個容器中運行圖像。有關(guān)更多信息Dockerfiles
,請參閱Docker用戶指南和Dockerfile參考。
將以下內(nèi)容添加到Dockerfile
。FROM python:3 ENV PYTHONUNBUFFERED 1 RUN mkdir / code WORKDIR / code ADD requirements.txt / code / RUN pip install -r requirements.txt ADD。/ code /這Dockerfile
從一個Python 3父圖像開始。父圖像通過添加新code
目錄進(jìn)行修改。通過安裝requirements.txt
文件中定義的Python需求進(jìn)一步修改父映像。
保存并關(guān)閉Dockerfile
。
requirements.txt
在您的項目目錄中創(chuàng)建一個。該文件由RUN pip install -r requirements.txt
您的命令使用Dockerfile
。
在文件中添加所需的軟件。Django> = 1.8,<2.0 psycopg2
保存并關(guān)閉requirements.txt
文件。
docker-compose.yml
在您的項目目錄中創(chuàng)建一個名為的文件。該docker-compose.yml
文件描述了制作您的應(yīng)用的服務(wù)。在這個例子中,這些服務(wù)是一個Web服務(wù)器和數(shù)據(jù)庫。撰寫文件還描述了這些服務(wù)使用哪些Docker映像,它們?nèi)绾捂溄釉谝黄?,以及它們可能需要裝入容器內(nèi)的任何卷。最后,該docker-compose.yml
文件描述了這些服務(wù)公開哪些端口。有關(guān)docker-compose.yml
此文件如何工作的更多信息,請參閱參考資料。
將以下配置添加到文件中。版本:'3'服務(wù):db:image:postgres web:build:。命令:python3 manage.py runserver 0.0.0.0:8000卷: - 。:/ code ports: - “8000:8000”depends_on: - db這個文件定義了兩個服務(wù):db
服務(wù)和web
服務(wù)。
保存并關(guān)閉docker-compose.yml
文件。
在這一步中,您將通過構(gòu)建上一過程中定義的構(gòu)建上下文中的圖像來創(chuàng)建Django初學(xué)者項目。
切換到您的項目目錄的根目錄。
通過運行docker-compose run命令來創(chuàng)建Django項目,如下所示。docker-compose運行web django-admin.py startproject composeexample。這指示Compose django-admin.py startproject composeexample
使用web
服務(wù)的映像和配置在容器中運行。由于該web
圖像尚不存在,因此Compose會從當(dāng)前目錄中構(gòu)建它,如build: .
線條所示docker-compose.yml
。一旦web
構(gòu)建了服務(wù)映像,Compose就會運行它并django-admin.py startproject
在容器中執(zhí)行該命令。該命令指示Django創(chuàng)建一組代表Django項目的文件和目錄。
在后docker-compose
命令完成后,列出項目的內(nèi)容。$ ls -l drwxr-xr-x 2 root root composeexample -rw-rw-r-- 1用戶用戶docker-compose.yml -rw-rw-r-- 1個用戶用戶Dockerfile -rwxr-xr-x 1 root root manage.py -rw-rw-r-- 1個用戶用戶requirements.txt如果您在Linux上運行Docker,則django-admin
創(chuàng)建的文件將由root用戶擁有。發(fā)生這種情況是因為容器以root用戶身份運行。更改新文件的所有權(quán)。sudo chown -R $ USER:$ USER。如果您在Mac或Windows上運行Docker,則您應(yīng)擁有所有文件的所有權(quán),包括由所生成的文件django-admin
。列出文件只是為了驗證這一點。$ ls -l total 32 -rw -r -r-- 1位用戶員工145 Feb 13 23:00 Dockerfile drwxr-xr-x 6用戶人員204 Feb 13 23:07 composeexample -rw-r - r-- 1用戶工作人員159 Feb 13 23:02 docker-compose.yml -rwxr-xr-x 1用戶人員257 Feb 13 23:07 manage.py -rw -r - r-- 1個用戶人員16 Feb 13 23:01需求。文本
在本節(jié)中,您將為Django設(shè)置數(shù)據(jù)庫連接。
在您的項目目錄中,編輯該composeexample/settings.py
文件。
替換為DATABASES = ...
:DATABASES = {'default':{'ENGINE':'django.db.backends.postgresql','NAME':'postgres','USER':'postgres','HOST':'db ','PORT':5432,}}這些設(shè)置由中指定的postgres Docker鏡像決定docker-compose.yml
。
保存并關(guān)閉文件。
從項目的頂級目錄運行docker-compose up命令。$ docker-compose up djangosample_db_1是最新版本創(chuàng)建djangosample_web_1 ...創(chuàng)建djangosample_web_1 ... done附加到djangosample_db_1,djangosample_web_1 db_1 | 屬于這個數(shù)據(jù)庫系統(tǒng)的文件將由用戶“postgres”擁有。db_1 | 該用戶還必須擁有服務(wù)器進(jìn)程。db_1 | db_1 | 數(shù)據(jù)庫集群將使用語言環(huán)境“en_US.utf8”進(jìn)行初始化。db_1 | 默認(rèn)的數(shù)據(jù)庫編碼相應(yīng)地被設(shè)置為“UTF8”。db_1 | 默認(rèn)的文本搜索配置將被設(shè)置為“english”。。。。web_1 | 2017年5月30日 - 21:44:49 web_1 | Django版本1.11.1,使用設(shè)置'composeexample.settings'web_1 | 從http://0.0.0.0啟動開發(fā)服務(wù)器:8000 / web_1 | 使用CONTROL-C退出服務(wù)器。此時,您的Django應(yīng)用程序應(yīng)該在端口上運行8000
在您的Docker主機上。在Docker for Mac和Docker for Windows上,轉(zhuǎn)到http://localhost:8000
Web瀏覽器以查看Django歡迎頁面。如果您使用Docker Machine,則docker-machine ip MACHINE_VM
返回可添加端口(<Docker-Host-IP>:8000
)的Docker主機IP地址。
注意:
在某些平臺(Windows 10)上,您可能需要編輯ALLOWED_HOSTS
內(nèi)部settings.py
并將Docker主機名或IP地址添加到列表中。為了演示目的,您可以將該值設(shè)置為:
ALLOWED_HOSTS = '*'
請注意,這個值是不是對生產(chǎn)使用是安全的。有關(guān)更多信息,請參閱Django文檔。
列出運行的容器。在另一個終端窗口中,使用該docker ps
命令列出正在運行的Docker進(jìn)程。$ docker ps容器ID映像命令創(chuàng)建狀態(tài)端口名稱def85eff5f51 django_web“python3 manage.py ...”10分鐘前上傳9分鐘0.0.0.0:8000->8000/tcp django_web_1 678ce61c79cc postgres“docker-entrypoint ...”20分鐘前上升9分鐘5432 / tcp django_db_1
關(guān)閉服務(wù)并使用以下任一方法進(jìn)行清理:
- Stop the application by typing `Ctrl-C` in the same shell in where you started it: Gracefully stopping... (press Ctrl+C again to force) Killing test_web_1 ... done Killing test_db_1 ... done
- Or, for a more elegant shutdown, switch to a different shell, and run [docker-compose down](../reference/down/index) from the top level of your Django sample project directory. vmb at mymachine in ~/sandbox/django $ docker-compose down Stopping django_web_1 ... done Stopping django_db_1 ... done Removing django_web_1 ... done Removing django_web_run_1 ... done Removing django_db_1 ... done Removing network django_default
關(guān)閉應(yīng)用程序后,您可以安全地刪除Django項目目錄(例如,rm -rf django
)。