《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.
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文件,不會花不少時間。