Compose V2 專案啟動於2021年6月,直到2022年4月26號,釋出了GA版本。在釋出GA版本後,社群也宣佈對於Compose V1將不會再進行功能更新,將在6個月後結束生命週期(EOL),期間會進行關鍵的安全和錯誤修復。
V1與V2的相容對比
確保 V1 和 V2 之間的相容性對於日常工作流程至關重要,下面是V2中兩個關鍵的更改
更改 | 潛在影響 | 遷移 |
---|---|---|
V2原生支援BuildKit,並且預設開啟 | 開發者在V2中將預設使用BuildKit進行映象構建 | 可通過設定環境變數不使用 DOCKER_BUILDKIT=0 |
容器名字中使用 - 替代了 _ 作為分隔符 | 如果在指令碼中使用了容器名字,這可能會導致錯誤 | 可以通過 "--compatibility" 標記來關閉此更改 |
關於更多的相容性更改,請檢視相容性文件
如何安裝Compose V2
Windows,MacOS和Linux上使用Docker Desktop,就自帶了Compose V2,可通過命令 docker compose
執行。也可以通過配置“Use Docker Compose V2“來設定 docker-compose
別名到 docker compose
。
如果沒有使用Docker Desktop for Linux,而是直接使用的Docker Engine,則需要額外安裝 docker-compose-plugin
或者獨立的二進位制包。
例如對於Ubuntu,可以通過Docker官方的APT源直接安裝
❯ sudo apt update
❯ sudo apt install docker-compose-plugin
其他Linux, 例如在我的 openSUSE 上,通過手動從Github下載二進位制檔案進行安裝(注意選擇版本和平臺架構)
❯ DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
❯ mkdir -p $DOCKER_CONFIG/cli-plugins
❯ wget https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-linux-x86_64
❯ mv docker-compose-linux-x86_64 $DOCKER_CONFIG/cli-plugins/docker-compose
❯ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
執行一下命令測試
❯ docker compose version
Docker Compose version 2.6.0
更多安裝方式,請檢視官方文件。
Compose V2的優勢
在Docker CLI中快速交付新功能
- 支援GPU主機 - 如果Docker主機有GPU裝置(顯示卡)並且Docker引擎進行了相關配置, 則Compose服務可以定義GPU裝置的預留。
- 支援配置服務啟用(Profiles) - 通過選擇性伺服器啟用來為多種用途和環境啟動Compose應用模型,如下Compose檔案
version: "3.9"
services:
frontend:
image: frontend
profiles: ["frontend"]
phpmyadmin:
image: phpmyadmin
depends_on:
- db
profiles:
- debug
backend:
image: backend
db:
image: mysql
預設執行 docker compose up
將只會啟動 backend 和 db 服務,要啟動相應配置的服務,需要使用 --profile
標記或者設定環境變數 COMPOSE_PROFILES,例如
❯ docker compose --profile debug --profile frontend up
❯ COMPOSE_PROFILES=frontend,debug docker compose up
- 新增了
cp
命令 - 在服務容器和本地檔案系統直接拷貝檔案和目錄 - 新增了
ls
命令 - 列出當前環境中的Compose專案(應用棧)
開發到生產的無縫轉換
通過雲整合專案,可以容易的使用Compose V2將多容器應用部署到AWS ECS或者Azure ACI環境。
具體示例可參考 Deploying WordPress to the Cloud。
在Golang中建立一個同構的Docker生態系統
在Compose V2之前,V1是使用Python語言編寫的,不在Docker的語言生態系統裡。而V2使用Golang語言編寫,可以提供來自Moby、CLI或任何基於Golang的專案程式碼,減少了很多通過Python重寫新功能或缺陷的開發,容易從其他Docker工具(例如BuildKit)增加新功能到Compose中。
通過Golang,現在可以釋出一個靜態的二進位制執行檔案,相比Python,大大簡化了更新和依賴管理。
在沒有Compose檔案的情況下執行命令
Compose V2可以在以下情況下通過 --project-name|-p
選項來管理執行的Compose專案容器服務
- 當前目錄不包含專案Compose檔案(不在Compose專案檔案目錄下)
- 不通過
--file
標記指定Compose檔案 - 不通過
--project-directory
標記指定Compose專案目錄
可執行的命令: ps
,exec
,start
,stop
,restart
,down
可以先通過 docker compose ls
列出當前環境的Compose專案
❯ docker compose ls
NAME STATUS CONFIG FILES
dbweb running(1) docker-compose.yml
monitor running(1) /home/mengz/dockerapp/monitor/docker-compose.yml
traefik running(1) /home/mengz/dockerapp/traefik/docker-compose.yml
truenas running(1) /home/mengz/dockerapp/truenas/docker-compose.yml
然後通過 -p <專案名> 命令
來管理專案服務
❯ docker compose -p dbweb ps
NAME COMMAND SERVICE STATUS PORTS
dbweb_pgadmin "/entrypoint.sh" pgadmin running 443/tcp
❯ docker compose -p dbweb exec pgadmin sh
/pgadmin4 $ exit
總結
這裡簡單介紹了Docker Compose V2的一些特性和功能,隨著V1的逐漸淘汰,我們要擁抱V2,並且嘗試其提供的新功能。
關於詳細的Docker Docker,請參考官方文件。
參考:
同時釋出在【Mengz's Blog】