什麼是 stack?- 每天5分鐘玩轉 Docker 容器技術(111)

jj1130050965發表於2020-12-03

什麼是 stack?- 每天5分鐘玩轉 Docker 容器技術(111)

原創 CloudMan CloudMan 2017-12-27

第111篇

什麼是 stack?

什麼是 stack ?
在回答這個問題之前我們先回憶一下前面部署 WordPress 應用的過程:

  1. 首先建立 secret。

  2. 然後建立 MySQL service,這是 WordPress 依賴的服務。

  3. 最後建立 WordPress service。

也就是說,這個應用包含了兩個 service:MySQL 和 WordPress,它們之間有明確的依賴關係,必須先啟動 MySQL。

為了保證這個依賴關係,我們控制了 docker secret 和 docker service 命令的執行順序,只不過這個過程是手工完成的。

假如我們需要頻繁地在不同環境中部署 WordPress 應用,如果每次都手工執行效率就太低了,而且容易出錯。這是自動化的一個好機會,首先我們能想到的就是把這個過程寫成指令碼,大概內容如下:

稍微複雜一點的是第三步,通過 if 判斷 MySQL service 是否執行,如果是,則執行 WordPress service,否則通過 while 繼續等待,直到 MySQL 執行。

這個指令碼大體上能夠工作,實現了自動化,但有兩個缺點:

  1. 目前只有兩個 service,還比較簡單。現在的應用通常都包含多個 service,特別是採用 microservices 架構的應用,幾十個 service 是很正常的。用 shell 指令碼啟動和管理如此多的 service 將是一件非常有挑戰的任務。

  2. 用 while 和 if 維護 service 之間的依賴關係也是很有挑戰的,容易出錯。而且如何判斷 service 正常執行也不是件容易的事,指令碼中只簡單檢查了 service 是否存在,並沒有考慮 service 的實際執行狀態。

我們希望有一種更高效和可靠的方法來部署基於 service 的應用,這就是 stack。

stack 包含一系列 service,這些 service 組成了應用。stack 通過一個 YAML 檔案定義每個 service,並描述 service 使用的資源和各種依賴。

WordPress 的 stack 版本

如果將前面 WordPress 用 stack 來定義,YAML 檔案可以是這樣:

YAML 是一種閱讀性很強的文字格式,上面這個 stack 中定義了三種資源:service、secret 和 volume。

① services 定義了兩個 service:db 和 wordpress

② secrets 定義了兩個 secret:db_password 和 db_root_password,在 service db 和 wordpress 的定義中引用了這兩個 secret。

③ volumes 定義了一個 volume:db_data,service db 使用了此 volume。

④ wordpress 通過 depends_on 指定自己依賴 db 這個 service。Docker 會保證當 db 正常執行後再啟動 wordpress

可以在 YAML 中定義的元素遠遠不止這裡看到的這幾個,完整列表和使用方法可參考文件 https://docs.docker.com/compose/compose-file/

stack 的 YAML 有了,下一節我們學習 stack 的相關操作。 

書籍:

1.《每天5分鐘玩轉Docker容器技術》
https://item.jd.com/16936307278.html(點選“閱讀原文”直達)

2.《每天5分鐘玩轉OpenStack》
https://item.jd.com/12086376.html

相關文章