天天看點

Docker Compose容器編排

什麼是Docker Compose容器編排

Compose 項目是 Docker 官方的開源項目,負責實作對 Docker 容器叢集的快速編排。從功能上看,跟 OpenStack 中的 Heat 十分類似。

其代碼目前在 https://github.com/docker/compose 上開源。

Compose 定位是 「定義和運作多個 Docker 容器的應用(Defining and running multi-container Docker applications)」,其前身是開源項目 Fig。

通過第一部分中的介紹,我們知道使用一個 Dockerfile 模闆檔案,可以讓使用者很友善的定義一個單獨的應用容器。然而,在日常工作中,經常會碰到需要多個容器互相配合來完成某項任務的情況。例如要實作一個 Web 項目,除了 Web 服務容器本身,往往還需要再加上後端的資料庫服務容器,甚至還包括負載均衡容器等。

Compose 恰好滿足了這樣的需求。它允許使用者通過一個單獨的 docker-compose.yml 模闆檔案(YAML 格式)來定義一組相關聯的應用容器為一個項目(project)。

Compose 中有兩個重要的概念:

服務 (service):一個應用的容器,實際上可以包括若幹運作相同鏡像的容器執行個體。

項目 (project):由一組關聯的應用容器組成的一個完整業務單元,在 docker-compose.yml 檔案中定義。

Compose 的預設管理對象是項目,通過子指令對項目中的一組容器進行便捷地生命周期管理。

Compose 項目由 Python 編寫,實作上調用了 Docker 服務提供的 API 來對容器進行管理。是以,隻要所操作的平台支援 Docker API,就可以在其上利用 Compose 來進行編排管理

Docker Compose檔案格式

Docker Compose使用的是yaml檔案格式,字尾是 .yml

YAML是一種标記語言,很直覺的資料序列化格式

檔案格式及編寫注意事項:

不支援制表符tab鍵縮進,需要使用空格縮進

通常開頭縮進2個空格

字元後縮進一個空格,如冒号、逗号、橫杠

用井号注釋

如果包含特殊字元用單引号引起來

Docker Compose配置常用字段

build dockerfile context:指定Dockerfile檔案名建構鏡像上下文路徑

image:指定鏡像

command:執行指令,覆寫預設指令

container name:指定容器名稱,由于容器名稱是唯一的,如果指定自定義名稱,則無法scale

deploy:指定部署和運作服務相關配置,隻能在Swarm模式使用

environment:添加環境變量

networks:加入網絡

ports:暴露容器端口,與-p相同,但是端口不能低于60

volumes:挂載主控端路徑或指令卷

restart:重新開機政策,預設no,always,no-failure,unless-stoped

hostname:容器主機名

Docker Compose常用指令

build:重新建構服務

ps:列出容器

up:建立和啟動容器

exec:在容器裡面執行指令

scale:指定一個伺服器啟動數量

top:顯示容器程序

logs:檢視容器輸出

down:删除容器、網絡、資料卷和鏡像

stop/start/restart:停止/啟動/重新開機服務

Compose指令說明

基本使用格式

docker-compose [選項] [指令] [參數...]

docker-compose選項

--verbose輸出更多調試資訊

--version列印版本并輸出

-f,--file FILE使用特定的compose模闆檔案,預設為docker-compose.yml

-p,--project-name NAME指定項目名稱,預設使用目錄名稱

編排腳本的結構

編排腳本檔案名要以.yml為字尾結尾

一個完整的編排檔案主要包含三個部分:version(版本)、services(服務)、networks(網絡)

version是指docker-compose的版本,使用docker-compose version指令可以檢視版本資訊

services下的二級标簽可以定義多個服務,用以建立多個服務,其中包含服務名稱,鏡像檔案或者Dockerfile檔案目錄,端口映射,網絡,資料卷挂載

networks,加入指定網絡

實戰:Compose建立nginx服務

1.目錄結構

2.下載下傳compose

3.建立鏡像腳本

4.建立編排腳本

5.建立站點挂載目錄

6.運作容器

Docker Compose容器編排