1、更改主机名

#manager虚拟机
[root@manager ~]# hostname set-hostname swarm-manager
#worker-1虚拟机
[root@worker-1 network-scripts]# hostname set-hostname swarm-worker-1
#worker-2虚拟机
[root@worker-2 network-scripts]# hostname set-hostname swarm-worker-2

2、配置hosts文件 每一台都需要添加

echo -e "172.16.31.10 manager\n172.16.31.11 worker-1\n172.16.31.12 worker-2" | sudo tee -a /etc/hosts

或者

vim /etc/hosts
#加上这几个主机映射关系
172.16.31.10 manager 
172.16.31.11 worker-1 
172.16.31.12 worker-2  

3.关闭防火墙和selinux

systemctl stop firewalld
systemctl disable firewalld

#临时关闭selinux

setenforce 0

#永久关闭
要永久关闭 SELinux,你可以使用以下命令直接修改 /etc/selinux/config 文件,而无需手动编辑:

sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

说明:
sed -i 用于直接编辑文件内容。
该命令将文件中的 SELINUX=enforcing 替换为 SELINUX=disabled,从而永久关闭 SELinux。
关闭后生效:
你需要重启系统才能使 SELinux 完全禁用:

sudo reboot

4、docker swarm集群部署

创建swarm集群
#在manager虚拟机上创建,填自己manager虚拟机的ip地址

[root@manager ~]# docker swarm init --advertise-addr 172.16.31.10

初始化后返回的

docker swarm join --token SWMTKN-1-70pa2ab7p1zeee1s6l49u420fcjtxcvqoplxb7r3mupvkenkdo-6ryk8uc16bd2150c1iuweljhi 172.16.31.10:2377

上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值。
其中,–advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令。

2.添加节点主机到swarm集群
把上面docker swarm join xxxxx 执行到所有工作节点

在其他2台worker虚拟机上都进行上述操作

#在manager虚拟机上查看节点
[root@manager ~]# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
z6sfk0wglnqagtbbe07u8f701 *   manager    Ready     Active         Leader           24.10.8
g4hltfe2aqsyoysvop0c8m21z     worker-1   Ready     Active                          24.10.8
omk1t29nhlxkrjz59eb1lxnrg     worker-2   Ready     Active                          24.10.8

创建网络
在 managmer 上创建一个 overlay 为驱动的网络(默认使用的网络连接为ingress),查看集群环境下的网络列表:docker network ls

sudo docker network create -d overlay nginx_net

使用 docker service create 命令来创建服务,而不是直接使用 docker run。以下是您提供的 Redis 容器部署命令转换为 Docker Swarm 服务的示例:

docker service create \
  --name redis \
  --replicas 1 \  # 设置副本数量,可以根据需要调整
  --restart-condition any \  # 重启条件,您可以根据需求设置
  --sysctl net.core.somaxconn=1024 \
  -p 6379:6379 \
  --mount type=bind,source=/data/redis/redis.conf,target=/etc/redis/redis.conf \
  --mount type=bind,source=/data/redis/log/,target=/var/log/redis/ \
  --mount type=bind,source=/data/redis/data,target=/data \
  --env REDIS_PASSWORD=密码 \  # 使用环境变量来设置密码
  redis:latest redis-server /etc/redis/redis.conf --appendonly yes

使用 docker service ls 可以查看当前服务的状态。

如果需要进行扩展或管理,可以使用 docker service scale redis=<数量> 来调整副本数量。

使用 Docker Swarm 部署 MinIO,而不使用 Docker Compose Stack 文件,您可以直接使用 docker service create 命令。以下是将您提供的 MinIO 容器配置转换为 Docker Swarm 服务的命令示例:

docker service create \
  --name minio \
  --publish published=10087,target=9000 \
  --publish published=10088,target=9001 \
  --env MINIO_ROOT_USER=minioadmin \
  --env MINIO_ROOT_PASSWORD=test@2024 \
  --mount type=bind,source=/data/minio/data,target=/data \
  --mount type=bind,source=/data/minio/config,target=/root/.minio \
  --env TZ=Asia/Shanghai \
  --log-driver local \
  minio/minio:latest server /data --console-address ":9001" --address ":9000"

查看服务状态
要查看 MinIO 服务的状态,可以使用以下命令:

docker service ls

要查看服务的详细信息和任务状态,可以使用:

docker service ps minio

这样您就可以在 Docker Swarm 模式下成功部署 MinIO 服务。

Nginx 容器部署转换为 Docker Swarm 服务,可以使用 docker service create 命令。以下是将 Nginx 配置转换为 Docker Swarm 服务的示例命令:

docker service create \
  --name nginx \
  --publish published=18088,target=80 \
  --mount type=bind,source=/etc/localtime,target=/etc/localtime \
  --mount type=bind,source=/data/nginx/conf/,target=/etc/nginx \
  --mount type=bind,source=/data/nginx/dist/,target=/data/nginx/html/ \
  --mount type=bind,source=/data/nginx/logs/,target=/var/log/nginx/ \
  nginx

–name nginx: 指定服务的名称。
–publish published=18088,target=80: 将主机端口 18088 映射到容器内部端口 80。
–mount: 使用绑定挂载将主机目录映射到容器内目录。
source=/etc/localtime: 绑定本地时间设置。
source=/data/nginx/conf/: 绑定 Nginx 配置文件。
source=/data/nginx/dist/: 绑定 Nginx 静态文件。
source=/data/nginx/logs/: 绑定 Nginx 日志文件。
nginx: 使用最新版本的 Nginx 镜像。

查看服务状态
要查看 Nginx 服务的状态,可以使用以下命令:

docker service ls

要查看服务的详细信息和任务状态,可以使用:

docker service ps nginx

通过以上步骤,您可以在 Docker Swarm 模式下成功部署 Nginx 服务。

10-13 12:41