前一篇瞭解Docker使用Swarm集羣部署方式,並建立服務到Swarm集羣中;若是在集羣部署過程當中存在大量服務部署、編排那麼該如何處理呢?node
那麼就須要瞭解Docker Stack了。web
Docker在進行多服務部署和管理時一般會使用Docker Stack來解決大規模部署管理問題,Docker引擎在1.12 版本集成了Docker Swarm, 內置新的容器編排工具docker stack,經過提供指望狀態、滾動升級、簡單易用、擴縮容、健康檢查等特性簡化了應用的管理。docker
從體系結構上來說,Stack 位於 Docker 應用層級的最頂端。Stack 基於服務進行構建,而服務又基於容器,以下圖所示。ide
命令比較簡單且重點命令已經標記工具
命令 | 描述 |
docker stack deploy | 部署新stack或更新現有stackui |
docker stack ls | 顯示stack列表spa |
docker stack ps | 列出stack中的任務code |
docker stack rm | 移除一個或多個stackserver |
docker stack services | 列出stack中的服務 blog |
一、將本地建立鏡像推送到dockerhub:
注意:在推送本地編譯鏡像時提示:denied: requested access to the resource is denied
解決辦法:爲鏡像打標 docker tag 鏡像名 dockerhub用戶名/鏡像名
docker tag czidentityserver cwsheng/czidentityserver
二、添加一個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:
三、執行命令
docker stack deploy -c docker-compose.yml stackdemo
四、查看服務
docker service ps mygoweb
五、能夠看出docker stack和docker compose使用很是相似:
都是使用yml定義容器編排,且都能操做yml文件中定義的:services、volumes、networks等資源
docker-compose -f docker-compose up
docker stack deploy -c docker-compose.yml stackdemo
那麼他們有什麼不一樣呢
一、來源:docker-compose是一個Python項目,做用在Docker引擎的頂層,必須單獨安裝docker-compose工具包才能將其與Docker一塊兒使用;docker stack 來源docker 引擎原生支持,不準要額外安裝
二、compose-file版本支持:docker stack 只能支持 version3 以上版本;docker compose支持全部版本
三、docker stack 不支持 compose file中的「build」指令,docker compose 不支持 deploy(https://docs.docker.com/compose/compose-file/#deploy)
四、docker stack 是swarm mode的一部分, 即便是單機使用, 也須要一個 swarm 節點
五、docker stack 強化了service的概念:服務可理解爲發佈到生產環境時某組容器的預期狀態 ,以及強化了( 複製集、 容器重啓策略、回滾策略、服務更新策略 )等生產特性
一、docker-compose 更像是被定義爲單機容器編排工具
二、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/