docker swarm
使用
注意:docker swarm
没有内置支持各个容器副本独立的数据存储卷功能,似乎mesos
支持这个特性。
docker swarm
环境搭建
注意:公司环境和google
环境在centOS8.5
、centOS stream 8
上搭建swarm
后overlay
网络都无法正常工作;公司环境ubuntu20.4
上搭建swarm
后 overlay
网络也是无法正常工作;只有centOS7
搭建swarm
后overlay
网络能够正常工作。
建议:因为k8s
能够实现swarm
的所有功能,所以建议使用k8s
作为swarm
的替代方案。
centOS7
搭建
https://docs.docker.com/engine/swarm/swarm-tutorial/
使用dcli
安装docker
# 设置dcli工具
sudo rm -f /usr/bin/dcli && sudo curl https://fut001.oss-cn-hangzhou.aliyuncs.com/dcli/dcli-linux-x86_64 --output /usr/bin/dcli && sudo chmod +x /usr/bin/dcli
# 安装docker,版本26.1.1-1
sudo dcli docker install
分别设置manager
、worker1
、worker2
节点主机名称
hostnamectl set-hostname manager
hostnamectl set-hostname worker1
hostnamectl set-hostname worker2
在manager
节点上执行下面命令初始化manager
节点
docker swarm init --advertise-addr 192.168.1.203
在manager
节点上执行下面命令获取worker
节点加入manager
节点的命令
docker swarm join-token worker
在worker
节点中执行上面的docker swarm join
命令加入manager
节点
docker swarm join --token SWMTKN-1-23k8qyy8z3ljysi615rt6ytx7r2vmk5js4e9sg1h5nopiop08e-anddk72iojfkkc5mkm8haq9m9 192.168.1.203:2377
在manager
节点上执行下面命令查看swarm
集群节点信息
docker node ls
当前节点退出集群
docker swarm leave
创建服务测试swarm
集群overlay
网络是否正常
docker service create --detach=true --replicas 1 --name test-nginx --publish published=80,target=80 nginx
打开浏览器随机访问一个swarm
节点都能够查看到nginx
欢迎页面表示overlay
网络正常运行 http://192.168.1.203
、http://192.168.1.204
、http://192.168.1.205
service
的使用
创建service
docker service create --detach=true --replicas 1 --name helloworld alpine ping www.baidu.com
查看service
列表
docker service ls
查看指定service
的详细信息
docker service inspect --pretty helloworld
查看service
在哪个节点运行
docker service ps helloworld
删除service
docker service rm helloworld
动态缩放service
docker service scale helloworld=5
查看service
日志
docker service logs -f helloworld
进入某个容器的cli
进入service
某个容器cli
,获取helloworld service
在哪个节点运行信息
docker service ps helloworld
找到运行helloworld service
节点,查找容器id
,使用docker exec -it
进入容器cli
docker ps -a
docker exec -it containerId /bin/sh
使worker
节点进入drain
模式,进行维护
https://docs.docker.com/engine/swarm/swarm-tutorial/drain-node/
routing mesh
,使用routing mesh
配置好overlay
网络,否则请求响应缓慢
https://docs.docker.com/engine/swarm/ingress/
# 创建nginx service,使用routing mesh
docker service create --name nginx --publish 80:8080 nginx
# 增加nginx负载实例
docker service scale nginx=10
配置docker swarm
节点间跨主机通讯
https://blog.csdn.net/lixuanshengchao/article/details/82707249
在manger
节点创建overlay
网络
docker network create --driver=overlay --subnet=10.0.9.0/24 --gateway=10.0.9.1 --attachable=true overlaynet1
分别在三台docker
主机上面创建docker
容器
docker run --rm --detach -it --network=overlaynet1 --name=test1 centos:7
docker run --rm --detach -it --network=overlaynet1 --name=test2 centos:7
docker run --rm --detach -it --network=overlaynet1 --name=test3 centos:7
在容器中相互ping
对方(例如:ping test2
)、ping 192.168.1.123
、ping www.baidu.com
都成功
docker service
使用overlay
网络通讯,创建名为h1
服务,使用overlay
网络通讯
docker service create --detach=true --network=overlaynet1 --replicas 1 --name h1 alpine ping www.baidu.com
docker stack
用法
创建docker-compose.yaml
version: '3.8'
services:
nginx:
image: nginx
ports:
- "80:80"
# 只启动一个nginx实例
deploy:
replicas: 1
根据docker-compose.yaml
部署stack
,其中-c
表示--compose-file
docker stack deploy test1 -c docker-compose.yaml
查看已部署的堆栈
docker stack ls
查看stack
中service
的容器实例状态
docker stack ps test1
删除stack
docker stack rm test1
查看stack
中所有服务
docker stack services test1
查看指定服务日志
docker service logs test1_web
docker service logs -f --tail 10 test1_web
指定service
运行的节点
指定标签
查询swarm
集群所有节点
docker node ls
给节点打标签
docker node update --label-add mylabel=ml1 worker1
删除节点标签
docker node update --label-rm mylabel worker1
查看节点标签
docker node inspect worker1
指定service
部署的节点
version: '3.8'
services:
db:
image: mariadb:10.4.19
ports:
- "3306:3306"
environment:
- MARIADB_ROOT_PASSWORD="123456"
deploy:
replicas: 1
placement:
constraints:
- node.labels.mylabel==ml1
部署service
docker stack deploy test1 --compose-file docker-compose.yaml
指定节点名称
查询swarm
集群所有节点
docker node ls
指定service
部署的节点
version: '3.8'
services:
db:
image: mariadb:10.4.19
ports:
- "3306:3306"
environment:
- MARIADB_ROOT_PASSWORD="123456"
deploy:
replicas: 1
placement:
constraints:
- node.hostname==worker1
部署service
docker stack deploy test1 --compose-file docker-compose.yaml
使用基于spring-cloud
的微服务测试swarm
集群
参考文档运行 辅助示例
docker swarm
管理
删除指定节点
https://docs.docker.com/reference/cli/docker/node/rm/
# nodeid通过docker node ls获取
docker node rm <nodeid>
查看stack
中所有服务
docker stack services test1
删除stack
中的service
查看stack test1
中的service
列表
docker stack services test1
删除service
docker service rm test1_creator