前言:
前一篇了解Docker使用Swarm集群部署方式,並創建服務到Swarm集群中;如果在集群部署過程中存在大量服務部署、編排那么該如何處理呢?
那么就需要了解Docker Stack了。
1、Docker Stack是什么?
Docker在進行多服務部署和管理時通常會使用Docker Stack來解決大規模部署管理問題,Docker引擎在1.12 版本集成了Docker Swarm, 內置新的容器編排工具docker stack,通過提供期望狀態、滾動升級、簡單易用、擴縮容、健康檢查等特性簡化了應用的管理。
從體系結構上來講,Stack 位於 Docker 應用層級的最頂端。Stack 基於服務進行構建,而服務又基於容器,如下圖所示。
2、Docker Stack相關命令
命令比較簡單且重點命令已經標記
命令 | 描述 |
docker stack deploy | 部署新stack或更新現有stack |
docker stack ls | 顯示stack列表 |
docker stack ps | 列出stack中的任務 |
docker stack rm | 移除一個或多個stack |
docker stack services | 列出stack中的服務 |
3、Docker Stack應用示例
1、將本地創建鏡像推送到dockerhub:
注意:在推送本地編譯鏡像時提示:denied: requested access to the resource is denied
解決辦法:為鏡像打標 docker tag 鏡像名 dockerhub用戶名/鏡像名
docker tag czidentityserver cwsheng/czidentityserver
2、添加一個docker-compose.yml文件
version: "3.8" services: czids: image: cwsheng/czidentityserver ports: - "8090:8090" networks: - backend visualizer: image: dockersamples/visualizer:stable ports: - "8080:8080" stop_grace_period: 1m30s volumes: - "/var/run/docker.sock:/var/run/docker.sock" deploy: placement: constraints: - "node.role==manager" networks: backend:
3、執行命令
docker stack deploy -c docker-compose.yml stackdemo
4、查看服務
docker service ps mygoweb
5、可以看出docker stack和docker compose使用非常類似:
都是使用yml定義容器編排,且都能操作yml文件中定義的:services、volumes、networks等資源
docker-compose -f docker-compose up
docker stack deploy -c docker-compose.yml stackdemo
那么他們有什么不同呢
Docker Stack與Docker Compose的區別
1、來源:docker-compose是一個Python項目,作用在Docker引擎的頂層,必須單獨安裝docker-compose工具包才能將其與Docker一起使用;docker stack 來源docker 引擎原生支持,不許要額外安裝
2、compose-file版本支持:docker stack 只能支持 version3 以上版本;docker compose支持所有版本
3、docker stack 不支持 compose file中的“build”指令,docker compose 不支持 deploy(https://docs.docker.com/compose/compose-file/#deploy)
4、docker stack 是swarm mode的一部分, 即使是單機使用, 也需要一個 swarm 節點
5、docker stack 強化了service的概念:服務可理解為發布到生產環境時某組容器的預期狀態 ,以及強化了( 復制集、 容器重啟策略、回滾策略、服務更新策略 )等生產特性
總結
1、docker-compose 更像是被定義為單機容器編排工具
2、docker stack為適用於生產環境的編排工具
docker-compose、docker stack工具命令都可以使用version3 編寫的docker-compose.yml 文件上,版本3之前的docker-compose.yml 文件可繼續使用docker-compose工具,如果你僅需要一個能操作多個容器的工具,依舊可以使用docker-compose工具。
docker stack幾乎能做docker-compose所有的事情 (生產部署docker stack表現還更好),如果打算使用docker swarm集群編排,可遷移到docker stack。
參考:
https://docs.docker.com/compose/compose-file/