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 服务。