Docker Swarm集群config集中管理配置文件
在Swarm集群中管理配置數據(跟secret很像)
傳統配置文件管理姿勢是 放入鏡像、設置環境變量、或者是volume動態掛載,會降低鏡像的通用性,維護起來也麻煩,17.06版本后的docker支持統一 docker config子命令管理集群重的配置信息,無需將配置文件放入鏡像或者掛載到容器中就可以實現對服務的配置。
PS:config 僅能在Swarm集群中使用(這個地方和secret不一樣,secret可以在集群和compose中使用)。
?
下面以部署redis為例:
我先把本地集群環境還原下(三個machine構成的干凈集群):
?
然后新建一個配置文件
?
然后這樣關聯下
docker config create redis.conf redis.conf
查看 docker config?ls
?
然后直接創建單服務的集群
docker service create \
--name redis \
--config redis.conf \
-p 6379:6380 \
redis:latest \
redis-server /redis.conf
?
成功是成功了,但是有點尷尬,容器跑到別的節點上去了,我現在切到work節點上找到那個容器,然后登陸進去,看下實際情況。
?
上面的命令說明:
docker-machine ssh work1?切換到work1的這個節點機器上
如果不顯示target指定路徑,config的默認路徑就是直接掛載到/config.conf上。所以我上面是cd過去了,cat看看對不對,內容沒問題 是設置端口 6380,然后我下面又直接redis-cli嘗試連接了一下redis-serve結果失敗,這個是對的,因為咱們通過配置文件設置了6380,redis的默認端口是6379,上面也提示了,127.0.0.1:6379: Connection refused,下面我有指定了端口6380,連接成功,然后隨便測試了下,沒問題。
?
還有幾個地方需要注意一下,默認在容器/config.conf的文件屬性是只讀的,還有雖然可以理解成是掛載了剛剛manager節點上的那個文件,但是修改源文件,這里的文件并不會被修改,同時我剛剛隨便update一下端口映射,發現redis這個容器從work1節點上跑到manager節點上了,這到時沒啥bug,就是提醒下,update之后容器可能會被切換到別的工作節點上。
?
還有就是說下怎么替換線上的正在跑的服務的config哈,剛剛自己銅鼓了半天,在本地直接創建一個redis2.conf文件,然后
docker config create redis2.conf redis2.conf
?
下一步是直接通過service update 功能刪除原有的配置(不刪除重新設置會提示已經存在,而且沒有更新配置文件的功能(感覺應該有,但是我是失敗了))
?docker service update --config-rm?redis.conf?vtd27i1de4ex
刪除之后再把redis2.conf配置文件換上去,記得換成redis.conf,因為我們之前設置的默認執行入口是直接加載/redis.con這個文件的
docker service update --config-add source=redis2.conf,target=redis.conf vtd27i1de4ex
這樣就ok了,然后跳到容器上面,執行以下,測試結果是沒問題。端口重新更改了。
?
?
?
如果是docker-compose.yml的話就是這么配置(注意是configs后面多了一個s)
redis.conf文件里 還是指定端口
?
?
執行:
docker stack deploy -c docker-compose.yml redis
上面是我自己寫的,測試可以通過。
?
對了最后補充一下,剛剛我測試發現,就是上面我說如果想更改配置文件,需要先創建新的redis2.conf 然后移除容器上的redis.conf配置(不是上去刪文件,是update),然后在增加redis2.conf為新的配置文件,名字改成redis.conf,這樣有一個壞處就是沒有保留原始的redis.conf,其實可以這樣,創建redis2.conf之后,不是移除原來的配置,而是直接更改服務啟動時的默認參數(記得加引號):這樣也能達到效果,并且保留兩個配置文件,剛剛我本地測試過了。
docker service update --args 'redis-server /redis2.conf' 13tv9ax07l4n
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Docker Swarm集群config集中管理配置文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker Swarm集群secret
- 下一篇: Docker Swarm mode与滚动