Docker Compose與Docker Stack的不同之處
翻譯原文
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