當前位置:
首頁 > 知識 > Docker-compose實戰——Django+PostgreSQL

Docker-compose實戰——Django+PostgreSQL

今天我們來用docker-compose 快速安裝一個Django+PostgreSQL的開發環境。

Compose簡介

Compose 定位是「defining and running complex applications with Docker」,前身是 Fig,兼容 Fig 的模板文件。

Dockerfile 可以讓用戶管理一個單獨的應用容器;而 Compose 則允許用戶在一個模板(YAML 格式)中定義一組相關聯的應用容器(被稱為一個 project,即項目),例如一個 Web 服務容器再加上後端的資料庫服務容器等。

Docker-compose實戰——Django+PostgreSQL

該項目由 Python 編寫,實際上調用了 Docker 提供的 API 來實現。

安裝docker-compose請戳這裡,安裝好後就讓我們一起開始吧!

一、定義項目組件1.1 創建一個空的項目目錄

[root@localhost sparks]# mkdir django_test

1.2 在你的項目目錄下創建一個名為Dockerfile文件

Docker 可以通過 Dockerfile 的內容來自動構建鏡像。Dockerfile 是一個包含創建鏡像所有命令的文本文件,通過docker build命令可以根據 Dockerfile 的內容構建鏡像,在介紹如何構建之前先介紹下 Dockerfile 的基本語法結構。

想要了解更多 官方文檔

1.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/

這個dockerfile文件開始於python3基礎鏡像,創建並移動工作目錄至code目錄,將requirements.txt添加到code目錄中,並用pip命令安裝該文件中的依賴包。

1.4 在你的項目目錄下創建並添加如下內容至requirements.txt

Django>=1.8,<2.0 psycopg2

1.5 在你的項目目錄下創建並添加如下內容至docker-compose.yml

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

這個文件定義了兩個服務,資料庫(db)服務和web服務, 想要了解更多請點擊這裡

二、創建Django項目

在這一步,用之前步驟創建的文件製作鏡像並用這個鏡像來創建Django項目

2.1 轉至項目根目錄,運行如下命令來創建Django項目

sudo docker-compose run web django-admin.py startproject composeexample .

這裡django-admin.py startproject composeexample需要使用web服務的鏡像和配置,但是web鏡像目前並不存在,所以compose自動在當前目錄下尋找和創建該服務,

具體可以參見docker-compose.yml中 build: . 這一行。

一旦web服務鏡像被創建,就在該容器中運行django-admin.py startproject 來創建Django項目

2.2 在上面的命令執行完後,查看你的項目目錄文件

$ 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

如果你是在linux上運行docker,manage.py文件屬於root創建,因為在容器內運行都是用root用戶,可以通過如下命令改變許可權

sudo chown -R $USER:$USER .

三、連接資料庫

在這一部分,我們將創建資料庫並連接Django

3.1 在你的項目目錄下,編輯composeexample/settings.py文件3.2 將文件中DATABASES = ...替換為如下內容

DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": "postgres",
"USER": "postgres",
"HOST": "db",
"PORT": 5432,
}
}

3.3 運行命令在你的項目根目錄下

$ 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應用已經運行在docker主機的8000埠上啦,使用瀏覽器輸入http://localhost:8000就可以看到Django的歡迎界面啦

Docker-compose實戰——Django+PostgreSQL

3.4 查看正在運行的容器

在另一個終端上,你可以通過 docker ps 命令查看正在運行的容器

$ 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

一個web容器,一個postgre容器都在後台運行中,至此我們已經大功告成啦!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

node.js入門系列(一)——Node.js簡介
HTTP權威指南-HTTP報文
Promise實現多圖預載入
canvas——路徑搜索
使用Go語言來理解Tensorflow

TAG:科技優家 |

您可能感興趣

Windows Install Docker
MacOS Install Docker
centos7 install docker-ce
docker-compose ,docker-stack
Docker 小記—Compose&Swarm
使用gradle生成Spring Boot應用的Docker Image
通過 Docker 實現在 Linux 容器中運行 Microsoft SQL Server 資料庫
Docker下使用selenium+testng實現web自動化
iHealth基於Docker的DevOps CI/CD實踐
Docker Harbor+Keepalived+LVS+共享存儲高可用架構
Docker教程:Docker Compose入門
UCloud 葉理燈談:Docker、K8S 和 Serverless
UCloud葉理燈談:Docker、K8S和Serverless
Docker將與MuleSoft展開合作,Salesforce坐收漁利
Scrapy對接Docker
Docker編程 Hello World
Docker 安裝 Tomcat
微軟發布 Visual Studio Kubernetes、Docker EE 升級、AKS 已達到 GA 階段
Docker 創始人 Solomon Hykes 宣布從 Docker 離職
Windows Docker 安裝