【实用Docker教程】Docker Swarm教程,分布式部署您的服务
本文最后更新于 2024-06-12,
若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益, 请联系我 删除。
本站只有Telegram群组为唯一交流群组, 点击加入
文章内容有误?申请成为本站文章修订者或作者? 向站长提出申请
Docker Swarm 是什么?
Docker Swarm 是Docker官方的跨节点的容器编排工具。用户只需要在单一的管理节点上操作,即可管理集群下的所有节点和容器。
与k8s同为容器集群管理系统(容器编排工具),学会swarm后更好理解k8s。简而言之,swarm 就是管理多个docker容器(多个机器)的管理工具,它能轻松实现服务的分布式部署、高可用、负载均衡。
一、安装docker
curl -fsSL https://get.docker.com/ | sh
二、修改主机名
修改主机名,更改成swarm01,swarm02,这样更好的管理、查看集群
hostnamectl set-hostname swarm01
三、初始化Swarm
docker swarm init --advertise-addr 172.17.30.109
Swarm initialized: current node (ld1dpbt6rrkpx2jnriqqzow21) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-3ktv788059o9gl65styt1g3p2twtyho0xzito0082viekstpi7-6qclsdoo2qw67iq7jyud3qv65 \
172.17.30.109:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
四、查看集群节点
docker node list
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
j52o5frhmphiksqz0xq1mkbbh * node1 Ready Active Leader 18.09.7
nq6v8dog0xzgpzx51x7bv59bp node2 Ready Active 18.09.7
6whtoqrhkzv3ax4xy9ab20gmy node3 Ready Active 18.09.7
五、其他机器加入集群
1.分别在各个机器安装docker
2.加入swarm集群,直接复制初始化swarm后的命令,在工作节点中执行
docker swarm join \
--token SWMTKN-1-3ktv788059o9gl65styt1g3p2twtyho0xzito0082viekstpi7-6qclsdoo2qw67iq7jyud3qv65 \
172.17.30.109:2377
六、Docker Stack 部署集群应用
单机模式下,可以使用 Docker Compose 来编排多个服务。Docker Compose只能实现对单个机器的简单部署。而Docker Stack 只需对已有的 docker-compose.yml 配置文件稍加改造就可以完成 Docker 集群环境下的多服务编排。
# 创建nginx、ftp目录及配置文件
mkdir -p /home/nginxconf
mkdir -p /home/html
mkdir -p /home/nginx
mkdir -p /home/ftp/etc
cd /home/nginxconf
touch default.conf
#创建compose文件
vi swarm-compose.yml
#mode 分两种情况replicated和global
# replicated:复制服务,复制指定服务到集群的机器上。这种情况支持replicas
#global:全局服务,服务将部署至集群的每个节点。
version: "3"
services:
nginx-master:
image: nginx # 镜像名称
restart: always # 开机自动重启
ports: # 端口号绑定(宿主机:容器内)
- 80:80
volumes: # 目录映射(宿主机:容器内)/etc/nginx/conf.d/default.conf
- /home/nginxconf/default.conf:/etc/nginx/conf.d/default.conf
- /home/html:/usr/share/nginx/html
- /home/nginx:/cdn/upload #配置容器内部cdn目录映射到主机的/home/nginx目录,nginx代理配置了内部/cdn/upload
- /etc/localtime:/etc/localtime:ro #容器内的时间与宿主机一致
deploy:
mode: global #在集群中每个节点都安装一个容器
restart_policy:
condition: on-failure
networks:
- mgb
ftp-master:
image: stilliard/pure-ftpd
volumes:
- /home/ftp:/home/ftpusers/www
- /home/ftp/etc:/etc/pure-ftpd/passwd
ports:
- "20-21:20-21"
- "30000-30009:30000-30009"
command:
/bin/sh -c "/run.sh -c 100 -C 100 -l puredb:/etc/pure-ftpd/pureftpd.pdb -E -j -R -P 47.115.15.140 -p 30000:30009"
deploy:
replicas: 1
restart_policy:
condition: on-failure
placement:
constraints: #添加条件约束(只在某个节点中运行)
- node.id == ff7temvlhhi44u5orato6mhp0
networks:
- mgb
networks:
mgb:
driver: overlay
与单个docker容器部署不同,warm是用stack deploy 命令部署:
docker stack deploy -c swarm-compose.yml --with-registry-auth box
以上命令为部署一个新的stack(堆栈)或更新现有的stack。别名:box。
以上就是docker 集群部署应用的全部内容了,下面为常用命令
七、查看加入节点token
warm 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。
八、 node管理
# 让 node3 离开,排空 node3 的容器(在 master 上操作)
docker node update --availability drain 6whtoqrhkzv3ax4xy9ab20gmy
# 让 node3 主动离开集群,让节点处于down状态 (在 node3 上操作)
docker swarm leave
# 删除 node节点(在 master 上操作)
docker node rm 6whtoqrhkzv3ax4xy9ab20gmy
# 让 node3 离开,排空 node3 的容器(在 master 上操作)
docker node update --availability drain 6whtoqrhkzv3ax4xy9ab20gmy
九、label 管理
在管理者上操作
#########注意##########
如果compose文件指定了role运行条件服务器必须指定role,否则执行compose文件不会运行镜像
#########注意##########
添加标签
docker node update --label-add role=api-server swarm01
查看标签
docker node inspect swarm01
删除标签
docker node update --label-rm role swarm01
十、一些命令
#查看redis容器分布的节点
docker service ps redis
#清空node1节点的任务
docker node update --availability drain node1
#查看此时任务分配的节点
docker service ps redis
#检查节点的可用性
docker node inspect --pretty node1
#启用被清空的节点
docker node update --availability active node1
当节点的状态变为Active时,可以接受新的任务
在服务更新期间进行扩展
在滚动更新期间
当您设置另一个节点以耗尽可用性时
当另一个活动节点上的任务失败时
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果