docker stack,docker-compose前世今生
- 2019 年 12 月 5 日
- 筆記
《docker-compose真香》詳細講述docker-compose容器編排工具的用法,實際上容器編排yml文件在進化到版本3的時候,docker-compose更像是被定義為 適用於開發、測試環境的容器編排工具。
Docker引擎在1.12版本集成了Docker Swarm,內置新的容器編排工具docker stack,
① 使用方式雷同,都使用yml容器編排文件
$ docker-compose -f docker-compose up $ docker stack deploy -c docker-compose.yml somestackname
② 作用大體相同:這兩個工具命令都能操縱docker-compose.yml文件中定義的docker services、volumes 、networks資源。
現在無需另外安裝docker-compose工具包, 就可以利用docker-compose.yml文件創建Docker容器堆棧。
但是為什麼會引入新的docker stack 容器編排技術呢?docker-compose與docker stack除了語法,還有什麼不同?
兩者差異
docker stack僅針對docker-compose版本3容器編排文件,兩者對docker-compose版本3指令稍有差異化,請在這個頁面中搜索"ignore"查看更多細節。
舉例如下:
① docker stack不支持docker-compose中的「build」指令, 相比之下docker-compose可現場構建鏡像,更適合迭代開發和CI
This "build" option is ignored when deploying a stack in swarm mode with a (version 3) Compose file. The
docker stack
command accepts only pre-built images.
② docker-compose不支持docker-compos版本3中deploy 指令,該指令定義了適用於生產部署的配置,deploy指令專屬於docker stack.
deploy
- endpoint_mode
- labels
- mode
- placement
- replicas
- resources
- restart_policy
- rollback_config
- update_config
- Not supported for docker stack deploy
docker-compose版本2依舊有restart指令,對於生產部署來說支持不足,杯水車薪。
可以漸漸理解兩者差異的趨勢:
– docker-compose更像是被定義為單機容器編排工具;
– docker stack被定義為適用於生產環境的編排方式,強化複製集、容器重啟策略、回滾策略、服務更新策略等生產特性。
docker stack強化service的概念:服務可理解為發佈到生產環境時某組容器的預期狀態
前世
docker-compose是一個Python項目,最初有一個名叫fig的Python項目能夠解析fig.yml並啟動docker容器堆棧, 這個工具慢慢產品化並被改名為docker-compose,但是docker-compose始終是一個Python工具,作用在Docker引擎的頂層;使用Docker API根據規範啟動容器,必須單獨安裝docker-compose工具包才能將其與Docker一起使用。

docker stack的能力來源自docker引擎原生支持,你不需要安裝額外工具包就可啟動docker容器堆棧(docker stack 是docker swarm的一部分)。
docker stack支持與docker-compose相似的能力,但是在Docker引擎內Go語言環境中運行的,在使用docker stack命令之前你還必須創建一個swarm節點(這也不是問題)。
今生
docker stack, docker-compsoe兩者對yml版本3文件刻意形成差異化支持。
為什麼docker公司要強化docker stack,因為docker stack是進階docker swarm的必經之路;docker stack可認為是單機上的負載均衡部署,可認為是多節點集群部署(docker swarm)的特例。
畫外音:希望開發者上手docker stack用於生產部署,自然過渡到docker swarm,不然跟kubernetes怎麼競爭?
總結
docker stack、docker-compose工具都可以使用版本3編寫的docker-compose.yml文件。(版本3之前的docker-compose.yml文件可繼續使用docker-compose工具)
如果你僅需要一個能操作多個容器的工具,依舊可以使用docker-compose工具。
因為docker stack幾乎能做docker-compose所有的事情,如果你打算使用docker swarm集群編排,或者生產下的容器部署,可嘗試遷移到docker stack。
》修改為適用於docker satck的docker-compose.yml文件,也不會花很多時間。
+ https://docs.docker.com/compose/compose-file/
+ https://www.cnblogs.com/JulianHuang/p/10919346.html
+ https://www.cnblogs.com/JulianHuang/p/11641040.html