Docker Swarm(二)常用命令


 


  • # 管理配置文件
  • docker config
  •     # 查看已創建配置文件
  •     - docker config ls
  •     # 將已有配置文件添加到docker配置文件中
  •     - docker config create docker 配置文件名 本地配置文件

  •  # 管理swarm節點
  • docker node
  •     # 查看集群中的節點
  •     - docker node ls
  •     # 將manager角色降級為worker
  •     - docker node demote 主機名
  •     # 將worker角色升級為manager
  •     - docker node promote 主機名
  •     # 查看節點的詳細信息,默認json格式
  •     - docker node inspect 主機名
  •           # 查看節點信息平鋪格式
  •           - docker node inspect --pretty 主機名
  •     # 查看運行的一個或多個及節點任務數,默認當前節點
  •     - docker node ps
  •     # 從swarm中刪除一個節點
  •     - docker node rm 主機名
  •     # 更新一個節點
  •     - docker node update
  •           # 對節點設置狀態(“active”正常|“pause”暫停|“drain”排除自身work任務)
  •           - docker node update --availability

  •  # 管理敏感數據存儲
  • docker secret

  • # 服務棧,棧的形式,一般作為編排使用,格式與docker compose相同。
  • docker stack
  •     # 通過.yml文件指令部署
  •     - docker stack deploy -c 文件名.yml 編排服務名
  •     # 查看編排服務
  •     - docker stack ls
build
cgroup_parent
container_name
devices
dns
dns_search
tmpfs
external_links
links
network_mode
security_opt
stop_signal
sysctls
userns_mode
docker stack 不支持使用參數

  • # 作為集群的管理
  • docker swarm
  •     # 初始化一個swarm
  •     - docker swarm init
  •           # 指定初始化ip地址節點
  •           - docker swarm init --advertise-addr 管理端IP地址
  •           # 去除本地之外的所有管理器身份
  •           - docker swarm init --force-new-cluster
  •     # 將節點加入swarm集群,兩種加入模式manager與worker
  •     - docker swarm join
  •           # 工作節點加入管理節點需要通過join-token認證
  •           - docker swarm join-token
  •           # 重新獲取docker獲取初始化命令
  •           - docker swarm join-token worker
  •     # 離開swarm
  •     - docker swarm leave
  •     # 對swarm集群更新配置
  •     - docker swarm update

  • # 服務管理
  • docker service
  •     # 創建一個服務
  •     - docker service create
  •           # 創建的副本數
  •           - docker service create --replicas 副本數
  •           # 指定容器名稱
  •           - docker service create --name 名字
  •           # 每次容器與容器之間的更新時間間隔。
  •           - docker service create --update-delay s秒
  •           # 更新時同時並行更新數量,默認1
  •           - docker service create --update-parallelism 個數
  •           # 任務容器更新失敗時的模式,(“pause”停止|”continue“繼續),默認pause。
  •           - docker service create --update-failure-action 類型
  •           # 每次容器與容器之間的回滾時間間隔。
  •           - docker service create --rollback-monitor 20s
  •           # 回滾故障率如果小於百分比允許運行
  •           - docker service create --rollback-max-failure-ratio .數值(列“.2”為%20)
  •           # 添加網絡
  •           - docker service create --network 網絡名
  •           # 創建volume類型數據卷
  •           - docker service create --mount type=volume,src=volume名稱,dst=容器目錄
  •           # 創建bind讀寫目錄掛載
  •           - docker service create --mount type=bind,src=宿主目錄,dst=容器目錄
  •           # 創建bind只讀目錄掛載
  •           - docker service create --mount type=bind,src=宿主目錄,dst=容器目錄,readonly
  •           # 創建dnsrr負載均衡模式
  •           - docker service create --endpoint-mode dnsrr 服務名
  •           # 創建docker配置文件到容器本地目錄
  •           - docker service create --config source=docker配置文件,target=配置文件路徑
  •           # 創建添加端口
  •           docker service create --publish 暴露端口:容器端口 服務名
  •     # 查看服務詳細信息,默認json格式
  •     - docker service inspect
  •           # 查看服務信息平鋪形式
  •           - docker service inspect --pretty 服務名
  •     # 查看服務內輸出
  •     - docker service logs
  •     # 列出服務
  •     - docker service ls
  •     # 列出服務任務信息
  •     - docker service ps    
  •           # 查看服務啟動信息
  •           - docker service ps 服務名
  •           # 過濾只運行的任務信息
  •           - docker service ps -f "desired-state=running" 服務名
  •     # 刪除服務
  •     - docker service rm
  •     # 縮容擴容服務
  •     - docker service scale
  •           # 擴展服務容器副本數量
  •           - docker service scale 服務名=副本數
  •     # 更新服務相關配置
  •     - docker service update
  •           # 容器加入指令
  •           - docker service update --args “指令” 服務名
  •           # 更新服務容器版本
  •           - docker service update --image 更新版本 服務名         
  •          # 回滾服務容器版本
  •          - docker service update --rollback 回滾服務名
  •           # 添加容器網絡
  •           - docker service update --network-add 網絡名 服務名
  •           # 刪除容器網絡
  •           - docker service update --network-rm 網絡名 服務名
  •           # 服務添加暴露端口
  •           - docker service update --publish-add 暴露端口:容器端口 服務名
  •           # 移除暴露端口
  •           - docker service update --publish-rm 暴露端口:容器端口 服務名
  •           # 修改負載均衡模式為dnsrr
  •           - docker service update --endpoint-mode dnsrr 服務名
  •           # 添加新的配置文件到容器內
  •           - docker service update --config-add 配置文件名稱,target=/../容器內配置文件名 服務名
---更新配置文件----

# 1創建配置文件
docker config create nginx2_config nginx2.conf 
# 2刪除舊配置文件
docker service update --config-rm ce_nginx_config 服務名
# 3添加新配置文件到服務
ocker service update --config-add src=nginx2_config,target=/etc/nginx/nginx.conf ce_nginx
使用方法
  •           # 刪除配置文件
  •           - docker service update --config-rm 配置文件名稱 服務名
  •          # 強制重啟服務
  •           - docker service update --force 服務名

  •    # 查看服務日志
  •    docker service ps --no-trunc {serviceName}

 

==========================下面簡單梳理了一些日常運維中用到的Swarm相關命令=============================

1) 初始化swarm manager並制定網卡地址
# docker swarm init --advertise-addr 182.48.115.237
 
2) 刪除集群,強制退出需要加–force (針對manager節點). 到各個節點上執行退出集群的命令
# docker node rm swarm-node1    
# docker swarm leave --force      //manager節點退出集群,需要加--force
 
3) 查看swarm worker的連接令牌
# docker swarm join-token worker
 
例如:
[root@manager-node ~]# docker swarm init --advertise-addr 182.48.115.237
Swarm initialized: current node (1gi8utvhu4rxy8oxar2g7h6gr) is now a manager.
  
To add a worker to this swarm, run the following command:
  
    docker swarm join \
    --token SWMTKN-1-4roc8fx10cyfgj1w1td8m0pkyim08mve578wvl03eqcg5ll3ig-f0apd81qfdwv27rnx4a4y9jej \
    182.48.115.237:2377
  
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
 
4) 加入docker swarm集群,作為worker節點
利用上面執行結果中的命令放在其他節點上執行,則該節點加入到swarm集群中作為worker節點
[root@node1 ~]# docker swarm join --token SWMTKN-1-4roc8fx10cyfgj1w1td8m0pkyim08mve578wvl03eqcg5ll3ig-f0apd81qfdwv27rnx4a4y9jej 182.48.115.237:2377
This node joined a swarm as a worker.
 
5) 查看swarm manager的連接令牌
# docker swarm join-token manager
 
例如:
[root@swarm-manager-node ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:
 
    docker swarm join \
    --token SWMTKN-1-075gaitl18z3v0p37sx7i5cmvzjjur0fbuixzp4tun0xh0cikd-0y8ttp5h0g54j10amn670w6su \
    172.16.60.220:2377
 
6) 加入docker swarm集群,作為manager節點
利用上面執行結果中的命令放在其他節點上執行,則該節點加入到swarm集群中作為manager管理節點,狀態為reachable.
[root@swarm-manager-node2 ~]# docker swarm join --token SWMTKN-1-075gaitl18z3v0p37sx7i5cmvzjjur0fbuixzp4tun0xh0cikd-0y8ttp5h0g54j10amn670w6su 172.16.60.220:2377
This node joined a swarm as a manager.
 
[root@swarm-manager-node2 ~]# docker node ls
ID                                                HOSTNAME                  STATUS      AVAILABILITY  MANAGER STATUS
rpbey5t1v14olke2mgtc430de     swarm-node2                 Ready        Active       
u6gkfr4j19gq16ddyb76fxsl3       swarm-node1                 Ready        Active       
vwbb0imil512a1le04bnkx98u *   swarm-manager-node    Ready       Active                      Leader
ybjvaszg838upeqvvzswhq0tt       swarm-manager-node2  Ready       Active                      Reachable
 
如果之前的leader狀態的manager管理節點掛了后(假如systemctl stop docker, 然后再systemctl start docker),
則新加入的manager節點狀態由reachable變為leader, 之前的manager節點狀態為unreachable.
[root@swarm-manager-node2 ~]# docker node ls
ID                                                HOSTNAME                  STATUS      AVAILABILITY  MANAGER STATUS
rpbey5t1v14olke2mgtc430de     swarm-node2                 Ready        Active       
u6gkfr4j19gq16ddyb76fxsl3       swarm-node1                 Ready        Active       
vwbb0imil512a1le04bnkx98u *   swarm-manager-node    Ready       Active                      Unreachable
ybjvaszg838upeqvvzswhq0tt       swarm-manager-node2  Ready       Active                      Leader
 
7) 使舊令牌無效並生成新令牌
# docker swarm join-token --rotate
 
8) 查看集群中的節點
# docker node ls
 
9) 查看集群中節點信息
# docker node inspect swarm-node1 --pretty
 
10) 調度程序可以將任務分配給節點
# docker node update --availability active swarm-node1
 
11) 調度程序不向節點分配新任務,但是現有任務仍然保持運行
# docker node update --availability pause swarm-node1
 
12) 調度程序不會將新任務分配給節點。調度程序關閉任何現有任務並在可用節點上安排它們. 也就是線下節點,不參與任務分配. # docker node update --availability drain swarm-node1
 
13) 添加節點標簽 # docker node update --label-add label1 --label-add bar=label2 swarm-node1
 
14) 刪除節點標簽 # docker node update --label-rm label1 swarm-node1
 
15) 將worker節點升級為manager節點 # docker node promote swarm-node1
 
16) 將manager節點降級為worker節點 # docker node demote swarm-manager-node
 
17) 查看服務列表 # docker service ls
 
18) 查看服務的具體信息 # docker service ps my-test
 
19) 創建一個不定義name,不定義replicas的服務. (如下的nginx是docker的nginx鏡像名稱,不是服務名稱) # docker service create nginx
 
20) 創建一個指定name的服務 # ocker service create --name my-nginx nginx
 
21) 創建一個指定name、run cmd的服務 # docker service create --name my-nginx nginx ping www.baidu.com
 
22) 創建一個指定name、version、run cmd的服務 # docker service create --name my-redis redis:3.0.6
# docker service create --name my-nginx nginx:1.8 /bin/bash
 
23) 創建一個指定name、port、replicas的服務 # docker service create --name my-nginx --replicas 3 -p 80:80 nginx
 
24) 為指定的服務更新一個端口 # docker service update --publish-add 80:80 my-nginx
 
25) 為指定的服務刪除一個端口 # docker service update --publish-rm 80:80 my-nginx
 
26) 將redis:3.0.6更新至redis:3.0.7
# docker service update --image redis:3.0.7 redis
 
27) 配置運行環境,指定工作目錄及環境變量 # docker service create --name my-nginx --env MYVAR=myvalue --workdir /data/www --user my_user nginx ping www.baidu.com
 
28) 創建一個my-nginx的服務 # docker service create --name my-nginx nginx ping www.baidu.com
 
29) 更新my-nginx服務的運行命令 # docker service update --args "ping www.baidu.com" my-nginx
 
30) 刪除一個服務 # docker service rm my-nginx
 
31) 在每個群組節點上運行web服務 # docker service create --name tomcat --mode global --publish mode=host,target=8080,published=8080 tomcat:latest
 
32) 創建一個overlay網絡 # docker network create --driver overlay my-network
# docker network create --driver overlay --subnet 10.10.10.0/24 --gateway 10.10.10.1 haha-network
 
33) 創建服務並將網絡添加至該服務 # docker service create --name my-test --replicas 3 --network my-network redis
 
34) 刪除群組網絡 # docker service update --network-rm my-network my-test
 
35) 更新群組網絡 # docker service update --network-add haha-network my-test
 
36) 創建群組並配置cpu和內存 # docker service create --name my_nginx --reserve-cpu 2 --reserve-memory 512m --replicas 3 nginx
 
37) 更改所分配的cpu和內存 # docker service update --reserve-cpu 1 --reserve-memory 256m my_nginx
 
38) 創建服務時自定義的幾個參數 指定每次更新的容器數量
--update-parallelism
 
指定容器更新的間隔
--update-delay
 
定義容器啟動后監控失敗的持續時間
--update-monitor
 
定義容器失敗的百分比
--update-max-failure-ratio
 
定義容器啟動失敗之后所執行的動作
--update-failure-action
 
比如:創建一個服務並運行3個副本,同步延遲10秒,10%任務失敗則暫停
# docker service create --name mysql_5_6_36 --replicas 3 --update-delay 10s --update-parallelism 1 --update-monitor 30s --update-failure-action pause --update-max-failure-ratio 0.1 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.36
 
39) 回滾至之前版本 # docker service update --rollback mysql  
自動回滾
如果服務部署失敗,則每次回滾2個任務,監控20秒,回滾可接受失敗率20%
# docker service create --name redis --replicas 6 --rollback-parallelism 2 --rollback-monitor 20s --rollback-max-failure-ratio .2 redis:latest
 
40) 創建服務並將目錄掛在至container中 # docker service create --name mysql --publish 3306:3306 --mount type=bind,src=/data/mysql,dst=/var/lib/mysql --replicas 3 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.36
 
需要注意使用bind綁定宿主機目錄會帶來的風險
- 綁定的主機路徑必須存在於每個集群節點上,否則會有問題;
- 調度程序可能會在任何時候重新安排運行服務容器,如果目標節點主機變得不健康或無法訪問;
- 主機綁定數據不可移植,當你綁定安裝時,不能保證你的應用程序開發方式與生產中的運行方式相同;
 
41) 添加swarm配置 # echo "this is a mysql config" | docker config create mysql -
 
42) 查看配置 # docker config ls
 
查看配置詳細信息
# docker config inspect mysql
 
43) 刪除配置 # docker config rm mysql
 
44) 添加配置 # docker service update --config-add mysql mysql
 
45) 刪除配置 # docker service update --config-rm mysql mysql
 
46) 添加配置 # docker config create kevinpage index.html
 
47) 啟動容器的同時添加配置(target如果報錯,就使用dst或destination) # docker service create --name nginx --publish 80:80 --replicas 3 --config src=kevinpage,target=/usr/share/nginx/html/index.html nginx

 

 

引用:https://www.cnblogs.com/xiangsikai/p/9935814.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM