官方文檔:https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/node
docker-compose 解決單臺機器多服務協同工做問題python
docker-swarm 解決多臺機器,實現集羣高可用,負載均衡ios
# 在沒有加入過集羣的乾淨的且安裝了docker的單節點上 docker swarm init
2.查看如何增長管理節點或worker節點命令及對應tokennginx
docker swarm join-token worker | manager # 在管理節點上,執行上面的命令會生成加入該swarm集羣的命令
3.在預加入swarm集羣的機器上,以工做節點加入swarmdocker
docker swarm join --token SWMTKN-1-3ube2y4dopioi3nk0z1ossxdryixqxughkufios3f1edywcb45-f3bxjlcqqalcpoxeh2v5mlva3 192.168.0.150:2377 \ --advertise-addr 192.168.0.151:2377 \ --listen-addr 192.168.0.151:2377 # 簡化命令 docker swarm join 192.168.0.151:2377
4.查看swarm中的節點負載均衡
docker node ls
5.舊的管理節點從新加入swarm,或者某臺機子docker重啓爲防止請除了swarm配置ide
# 在一個管理節點上加入自動鎖: 會生成一個密鑰,在從新加入時須要用到 docker swarm update --autolock=true # 重啓管理節點 service docker restart # 查看節點是否加入: 並無,顯示其down和unreachable下線和不能到達的 docker node ls # 執行以下安裝的將一個已經下掉的管理節點從新加入 $ docker swarm unlock Please enter unlock key: <enter your key>
6.docker swarm 刪除節點 (解散集羣)性能
# 排空節點上的集羣容器 docker node update --availability drain 8gt1q5bkq5cac5e49o9da3ahd # 主動離開集羣,讓節點處於down狀態,才能刪除 docker swarm leave # 刪除指定節點 (管理節點上操做) docker node rm g36lvv23ypjd8v7ovlst2n3yt # 管理節點,解散集羣 docker swarm leave --force
Raft協議:保證大多數節點存活纔可用,即>1,集羣至少大於3臺!rest
環境:雙主雙從,假設一個節點掛了,其它節點是否可用?日誌
將docker主節點【leader】機器宕機,另外一個主節點【reachable】也不能使用,即【兩臺主掛了一臺,就不能用】
將原主節點重啓後,又自動加入了,但其如今不是leader了,而是reachable了,但集羣能夠用了
直接經過命令部署集羣服務
# 開啓服務且啓動一個實例 docker run #容器啓動,沒有擴縮容 docker Service create -p 8000:80 --name my-nginx nginx # 集羣啓動,具備擴縮容,灰度升級,滾動更新 # 經過update更新的方式命令增長副本數量 docker service update --replicas 3 my-nginx # 經過update來減小副本數量 docker service update --replicas 1 my-nginx # 經過scale來擴縮容 docker service scale my-nginx=3
基於docker-compose.yml 文件部署集羣服務
# 查看命令幫助 docker Service --help # 管理節點上操做 docker service ls
2.查看服務運行日誌
docker service logs 服務名/服務id
3.【查看】查看集羣服務實例運行狀況
docker service ps 服務名/服務id # 查看服務運行中的容器分佈在那些機器上 docker service ps 服務名/服務id --filter 'desired-state=running'
4.【重啓】中止服務,而後啓動服務
docker service rm 服務名 docker stack deploy -c docker-compose.yml llb
5.【更新】不停服務升級服務--更換新的版本鏡像
docker service update --image 倉庫/鏡像名 經過docker service ls獲得的服務名或服務id docker service update --image rc_ctec01009_createorder:20200803_v1 llb_ctec01009_create_order
6.【更新】不停服務升級服務【什麼也沒變】須要在上面的基礎上加上--force參數
docker service update --image 10.251.26.11:5000/prod_python3_sunxiuwen_ctec01009_createorder:20200826_v1 llb_prod-ctec01009-create-order --force
7.【擴容】不停服務擴展服務
docker service scale 服務id=30
8.【回滾】不停服回滾上一次操做前
# 回滾上一次update改動版本【包含擴容都算更新】 docker service update --rollback llb_prod-ctec01009-service
通常服務是工做節點和管理節點都能啓動實例
但副本分全局副本即全部節點【管理+工做】均可以跑,服務副本即只能在工做節點上跑
docker service create --help --mode string Service mode (replicated or global) (default "replicated") docker service create --mode replicated --name myservice nginx docker service create --mode global --name logCenter alpine ping baidu.com # 場景:日誌收集 每個節點都有本身的日誌收集器,過濾,把全部日誌最終再傳給日誌中心 服務監控,狀態性能