- # 管理配置文件
- 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 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
