docker-compose 與 docker stack deploy 的差異

docker-compose 與 docker stack deploy 兩者執行的動作都是可以讀取 docker compose yaml 純文字文件 (通常文件命名爲 docker-compose.yaml 或是 docker-compose.yml),並且佈署應用程式到Docker平台上。

但是,兩者也有幾點差別:

docker-compose 以 Python 腳本編寫,
docker stack deploy 是 docker 命令的一個子命令,而 docker 主體使用 Go 語言編寫;

docker-compose 是一個獨立的工具程式,常見的佈署執行命令 docker-compose pull; docker-compose up
docker stack deploy 不是一個獨立的工具程式,是 命令行環境下 docker 主程式的一個子命令,常見的佈署執行命令 docker stack deploy -c docker-compose.yml stackname

docker-compose 主要是在單一節點下,進行多個 container 所構成應用程式在單一主機下的佈署,無法利用到 Swarm 叢集的高可用性機制,
docker stack deploy 是在多個節點構成的叢集上,進行多個 container 所構成應用程式的佈署,成功佈署上去的應用程式可以在 Swarm 叢集中充分利用高可用性機制;

docker-compose 所讀取的 docker-compose.yaml 或是 docker-compose.yml 文件裏面定義的 compose 版本號,大都是 2 以下,
docker stack deploy 所讀取的 docker-compose.yaml 或是 docker-compose.yml 文件裏面定義的 compose 版本號,大都是 3 以上;
compose 版本號越新,可以使用的關鍵字越多越多樣化,在佈署機制上越見靈活,另外,compose 版本號在 2 以前的關鍵字,有部分在 compose 版本號 3 以後已經停用;

綜合以上所述,使用 docker stack deploy 來佈署應用程式一般來說是比較建議的。

未來,隨着 Docker EE 3.0 發展成熟,新的 Docker Assemble 及 Docker Application 出現,將會有更方便的微服務應用程式佈署方式。這部分具體內容將另文介紹。



[參考資料]

https://docs.docker.com/compose/compose-file/#reference-and-guidelines

https://blog.docker.com/2018/12/docker-app-and-cnab/

留言

這個網誌中的熱門文章

Docker 環境下的 Proxy 配置