共计 5881 个字符,预计需要花费 15 分钟才能阅读完成。
关于 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
关于网络
swarm的网络只要其中一个节点启动了某个服务,随便访问那个节点都可以访问到启动的那个服务
正文完