Docker Compose項目實戰


Docker Compose項目簡介

Compose 定位是“defining and running complex applications with Docker”,前身是 Fig,兼容 Fig 的模板文件。
Dockerfile 可以讓用戶管理一個單獨的應用容器;而 Compose 則允許用戶在一個模板(YAML 格式)中定義一組相關聯的應用容器(被稱為一個  project  ,即項目)

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

安裝 (環境 Centos7)

yum install docker-compose -y

術語

服務(service):一個應用容器,實際上可以運行多個相同鏡像的實例。

項目(project):由一組關聯的應用容器組成的一個完整業務單元。

一個項目可以由多個服務(容器)關聯而成,Compose 面向項目進行管理。

YAML 模板文件詳解

默認的模板文件是  docker-compose.yml  ,其中定義的每個服務都必須通過  image  指令指定鏡像或build  指令(需要 Dockerfile)來自動構建。

如果使用  build  指令,在  Dockerfile  中設置的選項(例如: CMD  ,  EXPOSE  ,  VOLUME  ,  ENV  等) 將會自動被獲取,無需在  docker-compose.yml  中再次設置。

YAML 語法格式,猛擊這里

image

指定為鏡像名稱或鏡像 ID。如果鏡像在本地不存在, Compose  將會嘗試拉去這個鏡像

#實用的例子
image: ubuntu
image: bushaoxun/centos

build

指定  Dockerfile  所在文件夾的路徑。  Compose  將會利用它自動構建這個鏡像,然后使用這個鏡像。

#實用例子
build: .
build: /path/to/build/dir

links

鏈接到其它服務中的容器。使用服務名稱(同時作為別名)或服務名稱:服務別名  (SERVICE:ALIAS)  格式都可以。

鏈接容器后,將會在防火牆中創建對應的路由規則,同時會自動在容器中 /etc/hosts 文件中創建對應的主機名和 IP 地址記錄。

#語法舉例
links:
    - db
    - db:database
    - redis
 

external_links

鏈接到 docker-compose.yml 外部的容器,甚至 並非  Compose  管理的容器。參數格式跟  links  類似。

#語法舉例
external_links:
    - redis_1
    - project_db_1:mysql
    - project_db_1:postgresql

ports

暴露端口信息。

使用宿主:容器  (HOST:CONTAINER)  格式或者僅僅指定容器的端口(宿主將會隨機選擇端口)都可以。

ports:
    - "3000"
    - "8000:8000"
    - "49100:22"
    - "127.0.0.1:8001:8001"

 注意:當使用  HOST:CONTAINER  格式來映射端口時,如果你使用的容器端口小於 60 你可能會得到錯誤得結果,因為  YAML  將會解析  xx:yy  這種數字格式為 60 進制。所以建議采用字符串格式。

expose

暴露端口,但不映射到宿主機,只被連接的服務訪問。

expose:
    - "3000"
    - "8000"

volumes

卷掛載路徑設置。可以設置宿主機路徑 ( HOST:CONTAINER  ) 或加上訪問模式( HOST:CONTAINER:ro  )

volumes:
    - /var/lib/mysql
    - cache/:/tmp/cache
    - ~/configs:/etc/configs/:ro

volumes_from

從另一個服務或容器掛載它的所有卷。

volumes_from:
     - service_name
     - container_name

environment

設置環境變量。你可以使用數組或字典兩種格式。

environment:
    RACK_ENV: development
    SESSION_SECRET:
environment:
    - RACK_ENV=development
    - SESSION_SECRET

env_file

從文件中獲取環境變量,可以為單獨的文件路徑或列表。

如果通過  docker-compose -f FILE  指定了模板文件,則  env_file  中路徑會基於模板文件路徑。

如果有變量名稱與  environment  指令沖突,則以后者為准。

env_file: .env
env_file:
    - ./common.env
    - ./apps/web.env
    - /opt/secrets.env

環境變量文件中每一行必須符合格式,支持  #  開頭的注釋行。

RACK_ENV=development

extends

基於已有的服務進行擴展。例如我們已經有了一個 webapp 服務,模板文件為  common.yml  。

# common.yml
webapp:
    build: ./webapp
    environment:
        - DEBUG=false
        - SEND_EMAILS=false

編寫一個新的  development.yml  文件,使用  common.yml  中的 webapp 服務進行擴展。

# development.yml
web:
    extends:
        file: common.yml
    service: webapp
    ports:
        - "8000:8000"
    links:
        - db
    environment:
        - DEBUG=true
db:
    image: postgres

后者會自動繼承 common.yml 中的 webapp 服務及相關環節變量。

net

設置網絡模式。使用和  docker client  的  --net  參數一樣的值。

net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"

pid

跟主機系統共享進程命名空間。打開該選項的容器可以相互通過進程 ID 來訪問和操作。

pid: "host"

dns

配置 DNS 服務器。可以是一個值,也可以是一個列表。

dns: 8.8.8.8
dns:
    - 8.8.8.8
    - 114.114.114.114

dns_search

配置 DNS 搜索域。可以是一個值,也可以是一個列表。

dns_search: example.com
dns_search:
    - domain1.example.com
    - domain2.example.com

Docker-compose 命令詳解

build

命令用來創建或重新創建服務使用的鏡像,后面指定的是服務的名稱,創建之后的鏡像名為project_service,

即項目名后跟服務名。比如項目名稱為composeset,其中的一個服務名稱為web,則docker-compose build web創建的鏡像的名稱為composeset_web。

help

獲得一個命令的幫助。

kill

通過發送  SIGKILL  信號來強制停止服務容器。支持通過參數來指定發送的信號

docker-compose kill -s SIGINT

logs

查看服務的輸出。

port

打印綁定的公共端口

pull

拉取服務鏡像

rm

刪除停止的服務容器

run

在一個服務上執行一個命令

#命令實例,將會啟動一個 ubuntu 服務,執行  ping docker.com  命令。
#默認情況下,所有關聯的服務將會自動被啟動,除非這些服務已經在運行中。
docker-compose run ubuntu ping docker.com

scale

設置同一個服務運行的容器個數,通過  service=num  的參數來設置數量。

docker-compose scale web=2 worker=3

start

啟動一個已經存在的服務容器。

stop

停止一個已經運行的容器,但不刪除它。通過  docker-compose start  可以再次啟動這些容器。

up

構建,(重新)創建,啟動,鏈接一個服務相關的容器。鏈接的服務都將會啟動,除非他們已經運行。

環境變量

COMPOSE_PROJECT_NAME

設置通過 Compose 啟動的每一個容器前添加的項目名稱,默認是當前工作目錄的名字。

COMPOSE_FILE

設置要使用的  docker-compose.yml  的路徑。默認路徑是當前工作目錄。

DOCKER_HOST

設置 Docker daemon 的地址。默認使用  unix:///var/run/docker.sock  ,與 Docker 客戶端采用的默認值一致。

DOCKER_TLS_VERIFY

如果設置不為空,則與 Docker daemon 交互通過 TLS 進行。

DOCKER_CERT_PATH

配置 TLS 通信所需要的驗證( ca.pem  、 cert.pem  和  key.pem  )文件的路徑,默認是  ~/.docker

案例

簡單的 wordpress 運行案例

# 創建目錄
mkdir /wordpress
#編寫 docker-compose.yaml 文件
vim docker-compose.yaml
wordpress:
    image: wordpress
    links:
        - db:mariadb
    ports:
        - 90:80
db:
    image: mariadb
    environment:
        MYSQL_ROOT_PASSWORD: test
# 生成應用
docker-compose up -d

 測試:(perfect)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM