Compose簡(jiǎn)介

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

Dockerfile 可以讓用戶管理一個(gè)單獨(dú)的應(yīng)用容器;而 Compose 則允許用戶在一個(gè)模板(YAML 格式)中定義一組相關(guān)聯(lián)的應(yīng)用容器(被稱為一個(gè) project,即項(xiàng)目),例如一個(gè) Web 服務(wù)容器再加上后端的數(shù)據(jù)庫服務(wù)容器等。

該項(xiàng)目由 Python 編寫,實(shí)際上調(diào)用了 Docker 提供的 API 來實(shí)現(xiàn)。

安裝docker-compose請(qǐng)戳這里,安裝好后就讓我們一起開始吧!

 

一、定義項(xiàng)目組件

1.1 創(chuàng)建一個(gè)空的項(xiàng)目目錄

[root@localhost sparks]# mkdir django_test

  

1.2 在你的項(xiàng)目目錄下創(chuàng)建一個(gè)名為Dockerfile文件

Docker 可以通過 Dockerfile 的內(nèi)容來自動(dòng)構(gòu)建鏡像。Dockerfile 是一個(gè)包含創(chuàng)建鏡像所有命令的文本文件,通過docker build命令可以根據(jù) Dockerfile 的內(nèi)容構(gòu)建鏡像,在介紹如何構(gòu)建之前先介紹下 Dockerfile 的基本語法結(jié)構(gòu)。

想要了解更多 官方文檔

 

1.3 添加如下的內(nèi)容到Dockerfile

1
2
3
4
5
6
7
FROM python:3 
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

  這個(gè)dockerfile文件開始于python3基礎(chǔ)鏡像,創(chuàng)建并移動(dòng)工作目錄至code目錄,將requirements.txt添加到code目錄中,并用pip命令安裝該文件中的依賴包。

 

1.4 在你的項(xiàng)目目錄下創(chuàng)建并添加如下內(nèi)容至requirements.txt

1
2
Django>=1.8,<2.0
psycopg2

  

1.5 在你的項(xiàng)目目錄下創(chuàng)建并添加如下內(nèi)容至docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

  這個(gè)文件定義了兩個(gè)服務(wù),數(shù)據(jù)庫(db)服務(wù)和web服務(wù), 想要了解更多請(qǐng)點(diǎn)擊這里

 

二、創(chuàng)建Django項(xiàng)目

在這一步,用之前步驟創(chuàng)建的文件制作鏡像并用這個(gè)鏡像來創(chuàng)建Django項(xiàng)目

2.1  轉(zhuǎn)至項(xiàng)目根目錄,運(yùn)行如下命令來創(chuàng)建Django項(xiàng)目

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

  這里django-admin.py startproject composeexample需要使用web服務(wù)的鏡像和配置,但是web鏡像目前并不存在,所以compose自動(dòng)在當(dāng)前目錄下尋找和創(chuàng)建該服務(wù),

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

  一旦web服務(wù)鏡像被創(chuàng)建,就在該容器中運(yùn)行django-admin.py startproject 來創(chuàng)建Django項(xiàng)目

 

2.2 在上面的命令執(zhí)行完后,查看你的項(xiàng)目目錄文件

$ 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上運(yùn)行docker,manage.py文件屬于root創(chuàng)建,因?yàn)樵谌萜鲀?nèi)運(yùn)行都是用root用戶,可以通過如下命令改變權(quán)限

sudo chown -R $USER:$USER .

  

三、連接數(shù)據(jù)庫

在這一部分,我們將創(chuàng)建數(shù)據(jù)庫并連接Django

3.1 在你的項(xiàng)目目錄下,編輯composeexample/settings.py文件

3.2 將文件中DATABASES = ...替換為如下內(nèi)容

1
2
3
4
5
6
7
8
9
DATABASES = {
    'default': {
        'ENGINE''django.db.backends.postgresql',
        'NAME''postgres',
        'USER''postgres',
        'HOST''db',
        'PORT'5432,
    }
}

 

3.3 運(yùn)行命令在你的項(xiàng)目根目錄下

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

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

 

3.4 查看正在運(yùn)行的容器

  在另一個(gè)終端上,你可以通過 docker ps 命令查看正在運(yùn)行的容器

$ 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

  一個(gè)web容器,一個(gè)postgre容器都在后臺(tái)運(yùn)行中,至此我們已經(jīng)大功告成啦!

http://www.cnblogs.com/LiCheng-/p/6963779.html