文章目录[隐藏]
- 基础命令
- 服务service
- 使用Label控制service的位置
- 网络
- Scheduling Mode
- docker stack
- 其他命令
基础命令
代码语言:javascript复制# 初始化
前提开放
用于群集管理通信的TCP端口2377
TCP和UDP端口7946,用于节点之间的通信
UDP端口4789,用于覆盖网络流量,云服务器该端口不可用data-path-port 可修改该端口。
docker swarm init --advertise-addr 172.172.172.172 --data-path-port=7777
# 2377是集群管理端口,2375是docker服务监听端口
出现表示成功 docker swarm join --token SWMTKN-1-3oeem1x4sd5cugqfattkxpyuz4-2dsfjkhfskhfss2y7qiuhlw2g25j000no5gh7 172.172.172.172:2377
#加入集群
在其他节点服务器运行上面出现的命令出现This node joined a swarm as a worker表示加入成功
#查看所有节点
docker node ls
# 删除节点
##排空节点上的集群容器 。
docker node update --availability drain g36lvv23ypjd8v7ovlst2n3yt
##主动离开集群,让节点处于down状态,才能删除
docker swarm leave
##删除指定节点 (管理节点上操作)
docker node rm g36lvv23ypjd8v7ovlst2n3yt
#管理节点,解散集群 docker swarm leave --force
服务service
代码语言:javascript复制#创建服务
docker service create --name web-sqgs -p 81:80 --replicas 5
dqgs/dqgs-docker-ci
#查看所有服务
docker service ls # 查看某服务下的任务状态 docker service ps nginx # 删除服务 docker service rm [SERVICE_NAME] # 服务的扩缩容 docker service scale web-dqgs=10 会将服务副本数由 5 个增加到 10 个。后台会将服务的期望状态从 5 个增加到 10 个 再次执行 docker service scale 命令将副本数从 10 个降为 5 个。 docker service scale web-fe=5
使用Label控制service的位置
使用 label可以精细控制 Service 的运行位置呢。 逻辑分两步: 1、为每个 node 定义 label。 2、设置 service 运行在指定 label 的 node 上。
label 可以灵活描述 node 的属性,其形式是 key=value,用户可以任意指定,例如将 swarm-worker1 作为测试环境,为其添加 label env=test: docker node update –label-add env=test swarm-worker1。对应的,将 swarm-worker2 作为生产环境,添加 label env=prod: docker node update –label-add env=prod swarm-worker2
代码语言:javascript复制#现在部署 service 到测试环境:
docker service create --constraint node.labels.env==test --replicas 3 --name my_web --publish 8080:80
更新 service,将其迁移到生产环境:
docker service update --constraint-rm node.labels.env==test my_web
docker service update --constraint-add node.labels.env==prod my_web
网络
overlay 集群网络模式
- 多节点集群下统一分配服务独立ip
- 跨机器节点上的docker服务间能互相通信
- 支持主机节点和集群网络内的节点间互相通信
- 支持节点间加密通信 注:windows机器节点不支持加密通信
#创建自定义集群网络
docker network create -d overlay my-overlay
#创建可以与主机上其他docker服务通信的集群网络
docker network create -d overlay --attachable my-attachable-overlay
#创建加密通信且可以与主机上其他docker服务通信的集群网络
docker network create --opt encrypted --driver overlay --attachable my-attachable-multi-host-network
创建网络时,还可以指定ip地址范围、子网、网关等配置
portainer
参考
代码语言:javascript复制docker service create --name portainer_agent --network dqgs-all --mode global --constraint 'node.platform.os == linux' --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock --mount type=bind,src=//var/lib/docker/volumes,dst=/var/lib/docker/volumes portainer/agent
Scheduling Mode
- replicated mode
Swarm 可以在 service 创建或运行过程中灵活地通过 --replicas 调整容器副本的数量,内部调度器则会根据当前集群的资源使用状况在不同 node 上启停容器。 如果创建 service 时不指定,默认是 Replicated。在此模式下,node 上运行的副本数有多有少,一般情况下,资源更丰富的 node 运行的副本数更多,反之亦然。
- global mode
其作用是强制在每个 node 上都运行一个且最多一个副本。此模式特别适合需要运行 daemon 的集群环境。比如要收集所有容器的日志,就可以 global mode 创建 service,在所有 node 上都运行 hello/word容器,即使之后有新的 node 加入swarm 也会自动在新 node 上启动一个hello/word 副本
docker stack
部署命令:
代码语言:javascript复制docker stack deploy -c docker-compose.yml --with-registry-auth dqgs-web
其他命令
一、Token相关
Join tokens是允许一个节点加入集群的密钥。有两种可用的不同的join tokens,一个是用作worker角色,另一个是用作manager角色。在执行swarm join时使用–token来传递token。节点只在它们加入集群时才使用这个token。
代码语言:javascript复制# 常用命令:
swarm join-token :可以查看或更换join token。
docker swarm join-token worker:查看加入woker的命令。
docker swarm join-token manager:查看加入manager的命令
docker swarm join-token --rotate worker:重置woker的Token。
docker swarm join-token -q worker:仅打印Token。