本文最后更新于 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时,可以接受新的任务
 
在服务更新期间进行扩展
在滚动更新期间
当您设置另一个节点以耗尽可用性时
当另一个活动节点上的任务失败时