docker-compose、docker stack前世此生

回顧

  《docker-compose真香》詳細講述docker-compose容器編排工具的用法,實際上容器編排yml文件在進化到版本3的時候,docker-compose更像是被定義爲 適用於開發、測試環境的容器編排工具html

另外Docker引擎在1.12 版本集成了Docker Swarm,  內置新的容器編排工具docker stack,git

① 使用方式雷同:都使用yml 容器編排定義文件github

$ docker-compose -f docker-compose up

$ docker stack deploy -c docker-compose.yml somestackname

② 做用大致相同: 兩機制都能操縱 compose.yml文件中定義的 services、volumes 、networks資源。docker

另外因爲docker swarm內置,因此可不須要安裝docker-compose 工具 負載均衡

可是爲何會引入新的docker stack 容器編排技術呢? docker-compose與docker stack除了語法,還有什麼不一樣?工具

二者差別

請在這個頁面中搜索 「ignore」 查看更多細節。 測試

舉例以下:ui

① docker stack 不支持 compose file中的「build」指令, 相比之下docker-compose可現場建立鏡像,更適合迭代開發、測試和 快速驗證原型spa

      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.rest

② docker-compose 不支持 compos版本3中 deploy配置節(定義適用於生產部署的配置), 這個deploy配置節專屬於docker stack.

deploy

compose v2依舊有 restart指令, 對於生產部署支持不足、杯水車薪。

docker stack 強化了service的概念:服務可理解爲發佈到生產環境時某組容器的預期狀態 

前世

docker-compose是一個Python項目。 最初有一個名叫fig的Python項目可以解析 fig.yml——>啓動docker 容器堆棧,不少人都很喜歡這個工具,尤爲是github上fork 這個項目的forkers, 這個工具慢慢產品化並被更名爲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 不支持版本2規範編寫的compose.yml文件,必須使用最新的V3 版本。docker-compose工具依然能夠處理版本2,3(如上所述,會忽略掉再也不適用於該工具的某些指令)。

此生

 能夠漸漸理解二者差別的趨勢:

- docker-compose 更像是被定義爲單機容器編排工具;

- docker stack被定義爲適用於生產環境的編排工具,強化了( 複製集、 容器重啓策略、回滾策略、服務更新策略 )等生產特性。

爲何docker公司要強化docker stack, 由於docker stack是進階docker swarm 的必經之路, 

docker stack 可認爲是單機上的負載均衡部署; 可認爲是多節點集羣部署(docker swarm)的特例。

    畫外音: 但願開發者上手docker stack用於生產部署,天然過渡到docker swarm, 否則我跟 kubernetes怎麼競爭?

結論

docker-compose、docker stack工具命令均可以使用版本3編寫的docker-compose.yml 文件上,版本3以前的docker-compose.yml 文件可繼續使用docker-compose工具,

若是你僅須要一個能操做多個容器的工具,依舊可使用docker-compose工具。

由於docker stack幾乎能作docker-compose全部的事情 (生產部署docker stack表現還更好),若是你打算使用docker swarm集羣編排,可嘗試遷移到docker stack。

》》修改成適用於docker satck的 compose V3文件,不會花不少時間。

相關文章
相關標籤/搜索