透過 docker run command restart docker swarm

Share This Post

延續 Raspberry pi with Docker Swarm 跨網域溝通使用 network,在實際上的應用有可能某個 Raspberry pi 重啟或更換,希望可以透過 docker run 的方式讓 docker 重新上線,也因此研究解析了一下 docker swarm 的運作過程。

首先一旦建立完成 docker swarm 叢集之後,我們可以解析一下 command,透過下列指令:

docker inspect -f "{{.Name}} {{.Config.Cmd}}" $(docker ps -a -q)

將會列出類似以下內容:

/web-slave-01 {[/bin/bash -l -c npm start]}
/mysql {[/run.sh]}
/swarm-agent {[join --advertise 192.168.99.114:2376 consul://192.168.99.112:8500]}
/swarm-agent {[join --advertise 192.168.99.113:2376 consul://192.168.99.112:8500]}
/swarm-agent-master {[manage --tlsverify --tlscacert=/var/lib/boot2docker/ca.pem --tlscert=/var/lib/boot2docker/server.pem --tlskey=/var/lib/boot2docker/server-key.pem -H tcp://0.0.0.0:3376 --strategy spread consul://192.168.99.112:8500]}

若是使用 hypeiot 則會像

/swarm-agent {[join --advertise 192.168.168.120:2376 consul://192.168.168.120:8500]}
/swarm-agent-master {[manage --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:3376 --strategy spread consul://192.168.168.120:8500]}
/elegant_borg {[-server -bootstrap]}

就可以看到每個 docker 運行的 command,經過拆解後,測試過後確實可以重現,相關 command 如下:

swarm master start

docker run -d \
--name swarm-agent-master \
-p 3376:3376 \
-v /var/lib/boot2docker:/var/lib/boot2docker \
swarm manage \
--tlsverify \
--tlscacert=/var/lib/boot2docker/ca.pem \
--tlscert=/var/lib/boot2docker/server.pem \
--tlskey=/var/lib/boot2docker/server-key.pem \
-H tcp://0.0.0.0:3376 \
--strategy spread consul://192.168.99.112:8500

需要注意的是,在 command 中沒有辦法知道的參數,掛載 /var/lib/boot2docker 是因為需要 key 讓 docker-machine 可以進行操作

-v /var/lib/boot2docker:/var/lib/boot2docker

同樣為了讓 swarm manage 可以存取,需要把 port 開放出來

-p 3376:3376

--strategy spread 中的 consul ip 也是需要進行更換的

啟動 agant

master 上的 agent

docker run -d --name swarm-agent swarm join --advertise 192.168.99.113:2376 consul://192.168.99.112:8500

slave 上的 agent

docker run -d --name swarm-agent swarm join --advertise 192.168.99.114:2376 consul://192.168.99.112:8500

其中 --advertise 的 ip 將因為機台不同而異,當然也可以使用變數替代,就給大家自由發揮了!

結論

如此一來,即使是既有的 server 或是因為重啟已運行的 swarm 被 shutdown 我們也可以使用指令將它重啟,相信可以在合適的場合使用,畢竟有些時候透過 docker machine 的 drive 新建機器需要花一些時間,若能夠使用 command 把 swarm 重啟,整個反應時間也可以加快許多,給大家參考。

Subscribe To Our Newsletter

Get updates and learn from the best

More To Explore

Do You Want To Boost Your Business?

drop us a line and keep in touch