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.comdocker 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