Docker實踐(五):Docker Compose

環境說明:

主機名 操作系統版本 IP地址 docker版本 Compose版本 VMware版本
docker01 Ubuntu 16.04.5 172.27.9.71 18.09.2 1.24.0 12.5.2

本文所有測試都在Vmware虛擬機上完成
ubuntu安裝詳見:Ubuntu16.04.5以lvm方式安裝全記錄
docker安裝詳見:Ubuntu16.04安裝Docker

一、Docker Compose簡介

1.簡介

 Compose是用於定義和運行多個Docker應用的工具。使用yaml文件可以快速的創建和管理基於Docker容器的應用集羣。
Compose可以管理應用的整個生命週期,包括:

  • 啓動、停止和重建服務
  • 查看正在運行的服務的狀態
  • 傳輸正在運行的服務的日誌
  • 在服務上執行性命令

2.概念

  • 任務(task):一個容器被稱爲一個任務。任務的ID唯一,在同一服務中的多個任務序號依次遞增。
  • 服務(service):某個相同應用鏡像的容器副本集合,一個服務可以橫向擴展爲多個容器實例。
  • 服務棧(stack):由多個服務組成,相互配合完成特定業務,一般由docker-compose.yml文件定義。

Compose是Docker官方開源項目,負責實現對基於Docker容器的多應用服務的快速編排。

二、安裝Docker Compose

1.下載二進制文件

各版本下載地址:https://github.com/docker/compose/releases

root@docker01:~# curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Docker實踐(五):Docker Compose

2.賦權

root@docker01:~# chmod +x /usr/local/bin/docker-compose

3.安裝驗證

root@docker01:~# docker-compose --version
docker-compose version 1.24.0, build 0aa59064

4.命令補全

下載docker-compose

root@docker01:~# curl -L https://raw.githubusercontent.com/docker/compose/1.24.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 13258  100 13258    0     0   7823      0  0:00:01  0:00:01 --:--:--  7821

加載docker-compose

root@docker01:~# source /etc/bash_completion.d/docker-compose 
root@docker01:~# docker-compose 
build    config   down     exec     images   logs     port     pull     restart  run      start    top      up       
bundle   create   events   help     kill     pause    ps       push     rm       scale    stop     unpause  version  

加載並用tab驗證命令補全。

三、Docker Compose實踐

本文以搭建Web服務器Django爲例,演示Docker Compose的使用方法。

1.新建項目目錄

root@docker01:~# mkdir compose-django

在root家目錄/root下創建項目目錄compose-django

2.新建Dockerfile

root@docker01:~# cd compose-django/
root@docker01:~/compose-django# more Dockerfile 
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
  • FROM python:3     #將python:3作爲基礎鏡像
  • ENV PYTHONUNBUFFERED 1     #設置環境變量:不緩衝stdin、stdout和stderr,默認是緩衝的
  • RUN mkdir /code     #運行shell命令:創建目錄code
  • WORKDIR /code     #爲後面的RUN、COPY指令設置鏡像中的當前工作目錄
  • COPY requirements.txt /code/     #將文件requirements.txt複製到鏡像
  • RUN pip install -r requirements.txt     #運行shell命令,安裝requirements.txt中指定的Django和psycopg2
  • COPY . /code/     #將文件從build context複製到鏡像/code,即/root/compose-django下所有內容複製到/code

該Dockerfile用於構建後面的web鏡像

3.新建配置文件requirements.txt

root@docker01:~/compose-django# more requirements.txt 
Django>=2.0,<3.0
psycopg2>=2.7,<3.0

該文件用於指定Django和數據庫psycopg2版本,在Dockerfile會使用到。

4.新建docker-compose.yml

root@docker01:~/compose-django# more docker-compose.yml 
version: '3'

services:
  db:
    image: postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
  • docker-compose.yml    #模板文件名稱,可以是.yml或者.yaml
  • version: '3'    #版本信息
  • services:  #services定義了兩個service:db 和web
  • image: postgres  #db的鏡像名:postgress
  • build: .  #web通過build方式構建鏡像,配置文件爲Dockerfile
  • command: python manage.py runserver 0.0.0.0:8000 #容器啓動後默認執行的命令
  • volumes:  #設置數據卷所掛路徑
  • ports:  #暴露端口信息
  • depends_on:  #指定依賴關係:web服務依賴於db

docker-compose.yml描述了組成應用的服務:db和web,還有鏡像、卷、端口等信息。

5.新建Django工程

root@docker01:~/compose-django# docker-compose run web django-admin startproject composeexample .

Docker實踐(五):Docker Compose
Docker實踐(五):Docker Compose
compose構建web鏡像,運行web容器並在容器內執行 django-admin startproject composeexample,創建工程composeexample,注意該命令最後的'.'表示執行路徑爲當前目錄。

6.查看文件

Docker實踐(五):Docker Compose

7.修改Django配置文件

root@docker01:~/compose-django# view composeexample/settings.py
ALLOWED_HOSTS = ['*']

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

修改ALLOWED_HOSTS,允許所有連接;修改數據庫連接設置。

8.啓動應用

項目目錄/root/compose-django下啓動服務

root@docker01:~/compose-django# docker-compose up

Docker實踐(五):Docker Compose
如果希望在後臺運行可以加參數“-d”

9.訪問Django

Docker實踐(五):Docker Compose

10.查看容器

Docker實踐(五):Docker Compose
新窗口中查看當前運行的容器
容器的默認名字爲:項目名+服務名+_1
 
 
 
本文參考:
https://docs.docker.com/compose/install/
https://docs.docker.com/compose/compose-file/
https://docs.docker.com/compose/django/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章