翻譯原文

Docker引擎在1.12 版本集成了Docker Swarm,  帶來了一些新工具。

現在可以無需安裝 Docker Compose, 就可以利用docker-compose.yml 檔案建立Docker 容器堆疊。

這個命令是 docker stack,  使用方式與docker-compose 類似, 下面是示例:

$ docker-compose -f docker-compose up

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

使用方式基本相同,這兩個命令都能操縱docker-compose.yml檔案中定義的docker services、volumes 、networks等。

但是為什麼會發生這種情況,並且Docker Stack與Docker Compose是否有所不同?為什麼要引入?除了語法,還有什麼不同?

表象不同點

① docker stack 忽略了docker-compose中的“build”指令, 你不可以在stack 命令中建立映象。 Docker stack 需要已經存在的映象, 因此docker compose更適合開發場合。

② docker stack 、docker-compose 各自都會忽略docker-compose.yml檔案部分指令, 請在這個頁面中搜索 “ignore” 檢視更多細節。

最初誕生的差異

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規範編寫的docker-compose.yml檔案,必須使用最新的3.0+ 版本。docker-compose工具依然可以處理 版本2,3(如上所述,會忽略掉不再適用於該工具的某些指令)。

結論

docker stack 和docker-compose 都可以應用在版本3編寫的docker-compose.yml 檔案上,版本3之前的docker-compose.yml 檔案可繼續使用docker-compose工具,

如果你想要升級,也不會花很多時間。

因為docker stack幾乎能做docker-compose 所有的事情,如果你打算使用docker swarm 操縱容器,可以嘗試一下docker stack。

如果你僅需要一個能操作多個容器的工具,你依舊可以使用docker-compose 工具。

我的看法

現在docker-compose.yml 版本3與docker stack有些耦合,甚至於有些捆綁。

這個捆綁不僅體現在docker-compose版本3頁面中“Ignore”的指令:

   build、cap_add, cap_drop、external_links 等

還包括在很常用的兩個功能:

restart_policy指令: 這個容器自動重啟指令在版本3中處於deploy指令下面,deploy指令又必須捆綁docker stack,導致版本3編寫的docker-compose.yml 不能原生自動重啟容器。 F**K’

env file:: docker-compose工具預設會識別並應用同目錄下的.env 環境變數檔案, 而這個常見的功能竟然在docker  stack 指令中被忽略。

猜測Docker 公司是想讓大家在應用docker-compose 版本3的時候使用docker stack(docker stack 是docker swarm 的一部分),

在Kubernetes已經成為事實上的叢集容器編排標準的情況下,Docker 公司妄圖通過將docker-compose.yml 版本3檔案與Docker Swarm捆綁, 以期擴大Docker Swarm的市場佔有率。

所以我的建議是如果你要上手 Kubernetes,暫時可以忽略docker stack命令, 因為要將docker-compose版本3檔案升級到Docker Swarm環境並不是 想象的那麼簡單。

 

原文: https://vsupalov.com/difference-docker-compose-and-docker-stack/

&n