什麽是 stack?- 每天5分鐘玩轉 Docker 容器技術(111)
在回答這個問題之前我們先回憶一下前面部署 WordPress 應用的過程:
首先創建 secret。
然後創建 MySQL service,這是 WordPress 依賴的服務。
最後創建 WordPress service。
也就是說,這個應用包含了兩個 service:MySQL 和 WordPress,它們之間有明確的依賴關系,必須先啟動 MySQL。
為了保證這個依賴關系,我們控制了 docker secret
和 docker service
命令的執行順序,只不過這個過程是手工完成的。
假如我們需要頻繁地在不同環境中部署 WordPress 應用,如果每次都手工執行效率就太低了,而且容易出錯。這是自動化的一個好機會,首先我們能想到的就是把這個過程寫成腳本,大概內容如下:
稍微復雜一點的是第三步,通過 if
判斷 MySQL service 是否運行,如果是,則運行 WordPress service,否則通過 while
繼續等待,直到 MySQL 運行。
這個腳本大體上能夠工作,實現了自動化,但有兩個缺點:
目前只有兩個 service,還比較簡單。現在的應用通常都包含多個 service,特別是采用 microservices 架構的應用,幾十個 service 是很正常的。用 shell 腳本啟動和管理如此多的 service 將是一件非常有挑戰的任務。
用
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
什麽是 stack?- 每天5分鐘玩轉 Docker 容器技術(111)