系统版本:centos :7.8
docker-swarm 至少需要三个节点 所以需要准备三台机器(本文使用虚拟机 虚拟三台 centos机器)配置如下
节点信息
#修改主机名
hostnamectl set-hostname manager-01
主机 | ip地址 | 说明 |
---|---|---|
manager-01 | 192.168.198.106 | swarm-manager节点 |
work-01 | 192.168.198.107 | swarm-work01节点 |
work-02 | 192.168.198.108 | swarm-work02节点 |
硬件要求:
硬件资源 | 最小配置 | 推荐配置 |
---|---|---|
CPU | 1CPU | 2CPU |
内存 | 1G | 2-4G |
硬盘 | 20G | 50G |
docker版本:20.10.10
#advertise-addr 来指定其他节点连接m0时的地址
#来指定其他节点连接m0时的地址 来指定其他节点连接m0时的地址
#来指定其他节点连接m0时的地址
docker swarm init --advertise-addr 192.168.198.106:2377 --listen-addr
192.168.198.106:2377
#查看节点信息
docker node ls
#查看网络信息 docker-swarm 初始化时会创建一个类型为overlay的网络
docker network ls
3.1 添加manager 节点 –token 会失效 时效为24小时 以后添加节点时 执行 docker swarm join-token 获取最新的token 标记文本
#在manager节点执行。可以作为manager节点加入集群
docker swarm join-token manager
复制以下内容在其他两台worker主机 上执行 即可将执行的主机 以manager 权限添加到doker-swarm 集群中
3.2 添加worker 节点 –token 会失效 时效为24小时 以后添加节点时 执行 docker swarm join-token 获取最新的token
#在manager节点执行。可以作为worker节点加入集群
docker swarm join-token worker
复制以下内容在其他两台worker主机 上执行 即可将执行的主机 以worker 权限添加到doker-swarm 集群中
节点添加成功后 如下图所示(59.16 59.17 为manager 节点,59.18为worker节点)
3.3 节点权限提升降低
#将worker节点提升为manager节点,在manager节点执行如下命令:
docker node promote work-01
docker node ls
#将manager节点降低为worker节点,在manager节点执行如下命令:
docker node demote work-02
docker node ls
3.4 脱离集群
#想要那个节点脱离集群就在那个节点下执行以下命令
docker swarm leave
3.5 删除已经脱离集群的节点
#删除已经脱离集群的work-02节点 ps:如果是多个manager节点中的其中一个节点需要先将节点降为worker节点才能删除
docker node rm work-02
#manager节点只能强制退出 manager退出后意味着整个swarm不复存在。
docker swarm leave --force
4.1 拉取visualizer 镜像
docker pull dockersamples/visualizer:latest
4.2 创建容器并运行(需要运行在manager节点的主机上)
docker run -itd --name visualizer -p 8099:8080 -e HOST=192.168.59.16 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock dockersamples/visualizer:latest
#或者使用以下命令 可以通过集群中所有ip+port进行访问
docker service create \
--name=viz \
--publish=8080:8080/tcp \
--constraint=node.role==manager \
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
dockersamples/visualizer
5.1 三台主机都下载以下nginx镜像
docker pull nginx:1.18.0-alpine
docker pull nginx:1.19.3-alpine
5.2 部署nginx(通过任意集群内节点的ip+port都可访问)
#在manager节点中创建overlay网络:
docker network create -d overlay nginx-net
#创建5个nginx:alpines容器的集群:
docker service create --name nginx --network nginx-net -p 80:80 --replicas 5 nginx:1.18.0-alpine
#在manager节点使用docker service ls 命令查看服务情况,worker节点无法查看:
docker service ls
#在manager或者worker节点都可以执行docker ps命令查看本虚拟机容器情况:
docker ps
#manager节点只用于管理集群,不希望部署服务。
docker node update --availability drain manager-01
#使用docker service scale nginx=2命令将服务缩减为2个容器:
docker service scale nginx=2
docker service update --image nginx:1.19.3-alpine nginx
docker service update --publish-add 8090:80 nginx
5.5 删除服务
#删除服务
docker service rm nginx
#删除网络
docker network rm nginx-net
6.1 创建docker-compose.yml 文件 内容如下:
#stack 最低支持版本为 3
version: "3"
services:
nginx-web: # 服务名称
image: nginx:1.19.3-alpine # 镜像名称
container_name: nginx # 容器名称
networks:
- nginx-net #指定网络
restart: always #重启策略
ports:
- 81:80 #挂载端口
deploy:
replicas: 5 #生成实例数量
networks:
nginx-net: #需要创建的网络名称
driver: overlay #指定网络类型
6.2 运行nginx
#在manager节点中创建docker-compose.yml文件。执行如下命令:
docker stack deploy nginx-stack --compose-file=docker-compose.yml 或者是
docker stack deploy nginx-stack -c docker-compose.yml
#查看stack服务运行情况。执行如下命令:
docker stack services nginx-stack
#查看5个容器运行在哪个节点中。执行如下命令:
docker service ls #查看到NAME中的服务名为:nginx-stack_nginx-web
docker service ps nginx-stack_nginx-web
swarm命令
命令 | 描述 |
---|---|
docker swarm join | 初始化一个 swarm 群集 |
docker swarm join | 加入群集作为节点或管理器 |
docker swarm join-token | 管理用于加入群集的令牌 |
docker swarm leave | 离开 swarm 群集 |
docker swarm unlock | 解锁 swarm 群集 |
docker swarm unlock-key | 管理解锁钥匙 |
docker swarm update | 更新 swarm 群集 |
node命令
命令 | 描述 |
---|---|
docker node demote | 从 swarm 群集管理器中降级一个或多个节点 |
docker node inspect | 显示一个或多个节点的详细信息 |
docker node ls | 列出 swarm 群集中的节点 |
docker node promote | 将一个或多个节点推入到群集管理器中 |
docker node ps | 列出在一个或多个节点上运行的任务,默认为当前节点 |
docker node rm | 从 swarm 群集删除一个或多个节点 |
docker node update | 更新一个节点 |
service 命令
命令 | 描述 |
---|---|
docker service create | 创建服务 |
docker service inspect | 显示一个或多个服务的详细信息 |
docker service logs | 获取服务的日志 |
docker service ls | 列出服务 |
docker service rm | 删除一个或多个服务 |
docker service scale | 设置服务的实例数量 |
docker service update | 更新服务 |
docker service rollback | 恢复服务至update之前的配置 |
stack命令
命令 | 描述 |
---|---|
docker stack deploy | 部署新的堆栈或更新现有堆栈 |
docker stack ls | 列出现有堆栈 |
docker stack ps | 列出堆栈中的任务 |
docker stack rm | 删除一个或多个堆栈 |
docker stack services | 列出堆栈中的服务 |