當前位置:成語大全網 - 新華字典 - docker-compose.yml說明和編寫

docker-compose.yml說明和編寫

模板文件是使用 Compose 的核心,涉及到的指令關鍵字也比較多。大部分指令跟 docker run 相關參數的含義都是類似的。

默認的模板文件名稱為 docker-compose.yml ,格式為 YAML 格式。

可以將 Compose 文件命名為任何所需內容,以使其在邏輯上具有意義; docker-compose.yml 僅為標準名稱。我們可以簡單地將此文件命名為 docker-stack.yml 或更特定於項目的內容

註意每個服務都必須通過 image 指令指定鏡像或 build 指令(需要 Dockerfile )等來自動構建生成鏡像。

在 docker stack 下, build 指令不能使用,只能用 image

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

請註意,將 Compose 文件設置為 version:"3" 。本質上,這會使其兼容 swarm mode 。我們可以使用 deploy key (僅可用於 Compose 文件格式版本 3.x 及更高版本)及其子選項對每項服務(例如,web)進行負載均衡和優化性能。我們可以使用 docker stack deploy 命令(僅在 Compose 文件版本 3.x 及更高版本上受支持)運行此文件。您可以使用 docker-compose up 運行具有 非 swarm 配置的版本 3 文件。

指定 Dockerfile 所在文件夾的路徑(可以是絕對路徑,或者相對 docker-compose.yml 文件的路徑)。 Compose 將會利用它自動構建這個鏡像,然後使用這個鏡像。

也可以使用 context 指令指定 Dockerfile 所在文件夾的路徑。

使用 dockerfile 指令指定 Dockerfile 文件名。

使用 arg 指令指定構建鏡像時的變量。

使用 cache_from 指定構建鏡像的緩存

指定容器的內核能力(capacity)分配。

讓容器擁有所有能力可以指定為:

去掉 NET_ADMIN 能力可以指定為:

覆蓋容器啟動後默認執行的命令。

僅用於 Swarm mode

指定父 cgroup 組,意味著將繼承該組的資源限制。

例如,創建了壹個 cgroup 組名稱為 cgroups_1。

指定容器名稱。默認將會使用 項目名稱_服務名稱_序號 這樣的格式。

僅用於 Swarm mode

指定設備映射關系。

解決容器的依賴、啟動先後的問題。以下例子中會先啟動 redis``db 再啟動 web

自定義 DNS 服務器。可以是壹個值,也可以是壹個列表。

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

掛載壹個 tmpfs 文件系統到容器。

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

如果通過 docker-compose -f FILE 方式來指定 Compose 模板文件,則 env_file 中變量的路徑會基於模板文件路徑。

如果有變量名稱與 environment 指令沖突,則按照慣例,以後者為準。

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

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

只給定名稱的變量會自動獲取運行 Compose 主機上對應變量的值,可以用來防止泄露不必要的數據。

如果變量名稱或者值中用到 true|false , yes|no 等表達 布爾 含義的詞匯,最好放到引號裏,避免 YAML 自動解析某些內容為對應的布爾語義。這些特定詞匯,包括

y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF

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

僅可以指定內部端口為參數

類似 Docker 中的 --add-host 參數,指定額外的 host 名稱映射信息。

會在啟動後的服務容器中 /etc/hosts 文件中添加如下兩條條目。

通過命令檢查容器是否健康運行。

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

為容器添加 Docker 元數據(metadata)信息。例如可以為容器添加輔助說明信息。

配置日誌選項。

目前支持三種日誌驅動類型:

options 配置日誌驅動的相關參數:

設置網絡模式。使用和 docker run 的 --network 參數壹樣的值。

配置容器連接的網絡。

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

暴露端口信息。

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

存儲敏感數據,例如 mysql 服務密碼。

指定容器模板標簽(label)機制的默認屬性(用戶、角色、類型、級別等)。例如配置標簽的用戶名和角色名。

設置另壹個信號來停止容器。在默認情況下使用的是 SIGTERM 停止容器。

配置容器內核參數。

指定容器的 ulimits 限制值。

例如,指定最大進程數為 65535,指定文件句柄數為 20000(軟限制,應用可以隨時修改,不能超過硬限制) 和 40000(系統硬限制,只能 root 用戶提高)。

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

該指令中路徑支持相對路徑。

此外,還有包括 domainname , entrypoint , hostname , ipc , mac_address , privileged , read_only , shm_size , restart , stdin_open , tty , user , working_dir 等指令,基本跟 docker run 中對應參數的功能壹致。

指定服務容器啟動後執行的入口文件。

指定容器中運行應用的用戶名。

指定容器中工作目錄。

指定容器中搜索域名、主機名、mac 地址等。

允許容器中運行壹些特權命令。

指定容器退出後的重啟策略為始終重啟。該命令對保持服務始終運行十分有效,在生產環境中推薦配置為 always 或者 unless-stopped 。

以只讀模式掛載容器的 root 文件系統,意味著不能對容器內容進行修改。

打開標準輸入,可以接受外部輸入。

模擬壹個偽終端。

Compose 模板文件支持動態讀取主機的系統環境變量和當前目錄下的 .env 文件中的變量。

例如,下面的 Compose 文件將從運行它的環境中讀取變量 ${MONGO_VERSION} 的值,並寫入執行的指令中。

如果執行 MONGO_VERSION=3.2 docker-compose up 則會啟動壹個 mongo:3.2 鏡像的容器;如果執行 MONGO_VERSION=2.8 docker-compose up 則會啟動壹個 mongo:2.8 鏡像的容器。

若當前目錄存在 .env 文件,執行 docker-compose 命令時將從該文件中讀取變量。

在當前目錄新建 .env 文件並寫入以下內容。

執行 docker-compose up 則會啟動壹個 mongo:3.6 鏡像的容器。