前言
在動態的、大規模的分布式集群上,管理和分發配置文件也是很重要的工作。傳統的配置文件分發方式(如配置文件放入鏡像中,設置環境變量,volume 動態掛載等)都降低了鏡像的通用性。
Docker 17.06 引入了 Swarm 服務配置,它允許你在服務的鏡像或者運行的容器外部存儲非敏感信息,比如配置文件。這樣保證了鏡像的通用性,而無需將配置文件綁定到容器或使用環境變量來配置。
- Configs 是安裝在容器的文件系統中,而不是使用 RAM 磁盤。
- Configs 可以隨時添加或刪除,服務可以共享一個配置。
- Configs 可以與 Environments 或 Labels 結合使用,以獲得最大的靈活性。
- nginx或tomcat或redis等配置文件設定
- 設定或更改資料庫config等 這樣可以取代bind mount(將資料儲存在硬碟),存在Raft能提高可用性 swarm config跟secret有異曲同工之妙,可以透過指令來新增刪除config files
- config配置是不可變的,所以無法更改現有服務的文件,可以創建一個新的 Config 來使用不同的文件
- 若有任何service使用到該config,要先移除service才能移除config
- 如果是隱私資料一樣用secret來存
提醒:Docker Configs 僅對 Swarm 服務有效,對獨立的容器是無用的。如需使用,可以啟動 1 個副本的服務來使用 Docker Config。
Config 基本操作
友情提示:“ 需 Swarm Manager 權限才能操作 ”
- 創建配置
docker config create tomcat-server ./server.xml
- 配置列表
docker config ls
- 配置詳情
docker config inspect nginx-conf
- 配置刪除
docker config rm nginx-conf
config 使用
- 使用
用特定 server.xml 來建立一個service
docker service create --name masl -e TZ="Asia/Shanghai" --config source=tomcat-server,target=/usr/local/apache-tomcat-8.5.50/conf/server.xml --replicas 2 -p 8080:8080 172.16.99.2:40305/masl:dev-yc-36
- 更新
新增新的config來取代舊的,並更新有用到該config的service
docker config create tomcat-server-2 ./server.xml
docker service update --config-rm tomcat-server --config source=tomcat-server-2,target=/usr/local/apache-tomcat-8.5.50/conf/server.xml
- stack file使用
version: 3.3 services: web: image: 172.16.99.2:40305/masl:dev-yc-36 configs: - source: tomcat-server - target: /usr/local/apache-tomcat-8.5.50/conf/server.xml configs: tomcat-server: file: ./server.xml
注:3.3
之後才支持config
Swarm 對 Config 的管理
在 Swarm 中添加一個 Config 時,Docker 通過 TLS 連接把 Config 發送給 Swarm Manager。這個 Config 經過加密后,存儲在 Raft 日志中,而且整個 Raft 日志會被復制到其他 Manager 中,確保 Config 的高可用性。
在新創建的或正在運行的服務添加 Config 時,Config 將作為文件安裝到容器中,文件路徑默認為 linux 容器中的 /<config-name>
。
可以在任何時候通過更新服務的方式授權其他的 Config 或移除已有的Config 訪問權。
如果節點是 Swarm Manager,或者正在運行服務任務已被授權訪問這個 Config,那么這個節點才能訪問這個配置。當容器任務停止運行時,共享給它的 Config 將從該容器的內存文件系統中卸載,並從節點的內存刷新。
如果一個節點運行了一個帶 Config 的任務容器,在它失去與 Swarm 的連接后,這個任務容器仍然可以訪問其 Config,但只有在節點重新連接到 Swarm 時才能接收更新。
正在運行的服務正在使用的 Config 不能刪除。想要在不中斷正在運行的服務的情況下刪除配置可以參考 《Rotate a config》。
為了更容易地更新或回退 Config,可以考慮在 Config Name 中添加版本號或日期。
如需更新 Stack ,可以更改 Compose file,然后重新運行 docker stack deploy -c <new-compose-file> <stack-name>
。如果 Compose file 使用新的 Config ,那么 services 將開始使用這些配置。
參考:https://www.jianshu.com/p/1e6828fd8947