111、什麽是stack (Swarm18)
阿新 • • 發佈:2019-05-17
weight 正常 password 可靠的 多個 doc padding www. 創建 參考https://www.cnblogs.com/CloudMan6/p/8119150.html
什麽是 stack ?
在將這個之前先回顧一下前面部署WordPress的過程:
1、創建secret
2、創建mysql service
3、創建WordPress service
也就是說,這個應用包含了兩個service ; mysql + wordpress 。他們之間有明確的依賴關系,必須先啟動mysql。
為了保證這個依賴關系,我們控制了 docker secret 和 docker service 命令的執行順序,只不過這個過程是手工完成的。
假如我們需要頻繁的在不同環境中部署WordPress應用,如果每次都手工執行效率就太低了,而且容器出錯誤。這是自動化的一個好機會,首先我們把這個工程寫成一個自動化的腳本。
openssl rand -base64 20 | docker secret create mysql_root_password -
openssl rand -base64 20 | docker secret create mysql_password -
docker network create --driver overlay mysql_private
docker service create --name mysql --network mysql_private --secret source=mysql_root_password,target=mysql_root_password --secret source=mysql_password,target=mysql_password -e MYSQL_ROOT_PASSWORD_FILE=‘/run/secrets/mysql_root_password‘ -e MYSQL_PASSWORD_FILE=‘/run/secrets/mysql_password‘ -e MYSQL_USER=‘wordpress‘ -e MYSQL_DATABASE=‘wordpress‘ mysql:5.7
docker service create --name wordpress --network mysql_private --publish 80:80 --secret source=mysql_password,target=wp_db_password -e WORDPRESS_DB_HOST=‘mysql:3306‘ -e WORDPRESS_DB_NAME=‘wordpress‘ -e WORDPRESS_DB_USER=‘wordpress‘ -e WORDPRESS_DB_PASSWORD_FILE=‘/run/secrets/wp_db_password‘ wordpress
這個腳本大體上能夠工作,實現了自動化,但是有兩個缺點:
1、目前只有兩個service,還比較簡單,現在的應用通常包含多個service,特別是采用 microservices 架構的應用,幾十個service是很正常。用shell腳本啟動和管理如此多的service將是一件非常有挑戰的任務。
2、我們還要維護service之間的依賴關系,比較容易出錯。而且如何判斷service正常運行也不是一件容易的事情,不光要看service是否存在,還要考慮service的實際運行狀態。
我們希望有一種更高效和可靠的方法來部署基於service的應用,這就是stack。
stack 包含一系列service,這些service組成了應用。stack通過一個YAML文件定義每個service,並描述service使用資源和各種依賴。
WordPress的stack版本
version: ‘3.1‘
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD_FILE: /run/secrets/db_password
secrets:
- db_root_password
- db_password
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD_FILE: /run/secrets/db_password
secrets:
- db_password
secrets:
db_password:
file: db_password.txt
db_root_password:
file: db_root_password.txt
volumes:
db_data:
1、service 中定義了兩個 service : db 和 wordpress
2、secret 定義了兩個 secret: db_password 和 db_root_password ,在 service db 和 wordpress 的定義中引用了這兩個secret
3、volume定義了一個volume: db_data ,service db 使用了這個volume
4、wordpress 通過了 depends_on 指定自己依賴 db 這個 service 。 Docker 會保證 當 db 正常運行後再啟動 wordpress
可以在YAML 中定義的元素遠不止這些,完成的列表和使用方法可參考文檔 https://docs.docker.com/compose/compose-file/
111、什麽是stack (Swarm18)