1. 程式人生 > >什麽是 stack?- 每天5分鐘玩轉 Docker 容器技術(111)

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

docker swarm 容器 教程

什麽是 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

技術分享圖片


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