docker swarm背景介紹
Docker Swarm是一個Dockerized化的分布式應用程序的本地集群,它是在Machine所提供的功能的基礎上優(yōu)化主機資源的利用率和容錯服務。具體來說,Docker Swarm支持用戶創(chuàng)建可運行Docker Daemon的主機資源池,然后在資源池中運行Docker容器。Docker Swarm可以管理工作負載并維護集群狀態(tài)。
除了資源優(yōu)化,Docker Swarm可以保證應用的高可用性和容錯性。Docker Swarm會不斷的檢查Docker Daemon所在主機的健康狀態(tài)。當某個主機不可用時,Swarm就會將容器遷移到新的主機上。
Docker Swarm的亮點之一是它可以在應用的生命周期內(nèi)擴展,而且還可以實現(xiàn)滾動升級和動態(tài)修改節(jié)點。
初始化
docker swarm init --advertise-addr <MANAGER1-IP>
我們采用最常用的方式進行初始化,在主節(jié)點上進行容器初始化MANAGER1-IP填寫的主節(jié)點的ip地址,這個地址需要保證子節(jié)點可以正常訪問的ip地址,初始化完成之后,它會提示如果需要新增worker節(jié)點加入這個集群所需要運行的命令。

添加節(jié)點
初始化之后你在其他服務器將這臺服務器進行節(jié)點添加,這里我們設置了兩個三個節(jié)點一主節(jié)點兩個子節(jié)點,添加完節(jié)點之后再主節(jié)點上查看添加的所有節(jié)點查看節(jié)點狀態(tài)。


如果你之后還需要添加節(jié)點找不到命令可以運行docker swarm join-token worker 查看添加節(jié)點命令。

添加/刪除 標簽
設置好所有的子節(jié)點之后,我們需要進行設置tag標簽用于后面部署服務,進行標識告知哪些服務部署哪些節(jié)點,這里我們使用命令docker node update --label-add ksice 192-168-138-164
添加ksice標簽進行測試,在164節(jié)點上添加之后查看164節(jié)點上的標簽就能看到ksice為true的標識,一個節(jié)點上可以設置多個標簽。

同時刪除標簽docker node update --label-rm ksice 192-168-138-164

部署服務
所有節(jié)點添加完成之后就可以開始部署服務了,你可以通過命令進行部署,這就是個例子
docker service create --replicas 1 --name visualizer docker.io/dockersamples/visualizer
- docker service create用來創(chuàng)建服務
- --name表明服務名字是visualizer
- --replicas 表示期望1個服務實例
- docker.io/dockersamples/visualizer 表示運行鏡像是docker.io/dockersamples/visualizer
還有一種命令部署的方式是通過docker-compose.yml文件來進行部署 docker stack deploy -c 配置文件.yml 自定義網(wǎng)絡

采用docker-compose部署還需要在節(jié)點上設置多個tag標簽(也可以設置具體的節(jié)點),都是用來告知哪些服務該部署在哪臺節(jié)點上,防止所有服務跑到一臺服務器上引起服務器資源分配不均。
將文件進行運行部署之后可以通過docker service ls查看服務運行狀態(tài)和運行個數(shù)

你也可以通過docker service scale xxxx = num 用來合理的調(diào)整運行的實例數(shù)目
- docker service scale用來修改服務實例數(shù)
- xxx代表服務name或者服務id
- num代表個數(shù)
還可以通過docker service ps 服務名,查看服務部署在哪些節(jié)點上和最近的運行歷史

如果你運行報錯想查看error錯誤,鏡像啟動成功的話有鏡像id可以通過docker logs 鏡像id ,如果沒有鏡像id則采用
docker service ps --no-trunc <service name> 將截斷的error信息展示出來
想查看運行服務日志可以采用docker service logs -f 服務名進行實時查看
同時你還可以通過docker service update --image 在線更新服務所用鏡像版本
docker service update --image 鏡像名稱:鏡像tag 服務名稱
解散集群
docker node update --availability drain <node id> 將節(jié)點停用,該節(jié)點上的容器會遷移到其他節(jié)點確保服務正常,在進行docker swarm leave 主節(jié)點需要加個force強制解散。