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