docker swarm集群部署

1、更改主机名

bash 复制代码
#manager虚拟机
[root@manager ~]# hostname set-hostname swarm-manager
bash 复制代码
#worker-1虚拟机
[root@worker-1 network-scripts]# hostname set-hostname swarm-worker-1
bash 复制代码
#worker-2虚拟机
[root@worker-2 network-scripts]# hostname set-hostname swarm-worker-2

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

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

或者

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

3.关闭防火墙和selinux

bash 复制代码
systemctl stop firewalld
systemctl disable firewalld

#临时关闭selinux

bash 复制代码
setenforce 0

#永久关闭

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

bash 复制代码
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

说明:

sed -i 用于直接编辑文件内容。

该命令将文件中的 SELINUX=enforcing 替换为 SELINUX=disabled,从而永久关闭 SELinux。

关闭后生效:

你需要重启系统才能使 SELinux 完全禁用:

bash 复制代码
sudo reboot

4、docker swarm集群部署

创建swarm集群

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

bash 复制代码
[root@manager ~]# docker swarm init --advertise-addr 172.16.31.10

初始化后返回的

bash 复制代码
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虚拟机上都进行上述操作

bash 复制代码
#在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

bash 复制代码
sudo docker network create -d overlay nginx_net

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

bash 复制代码
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 服务的命令示例:

bash 复制代码
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 服务的状态,可以使用以下命令:

bash 复制代码
docker service ls

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

bash 复制代码
docker service ps minio

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

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

bash 复制代码
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 服务的状态,可以使用以下命令:

bash 复制代码
docker service ls

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

bash 复制代码
docker service ps nginx

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

相关推荐
Watermelo6177 小时前
【简单快速】windows中docker数据如何从C盘迁移到其他盘
java·运维·docker·容器·运维开发·devops·空间计算
龙吟游戏7 小时前
Ubuntu Server 25.10安装
linux·运维·ubuntu
zzxxlty7 小时前
windows 迁移ubuntu wsl从C盘到D盘
linux·运维·ubuntu
梦想的旅途27 小时前
Hook技术与内存注入在企业微信外部群数据获取中的技术与风险分析
linux·运维·服务器
翼龙云_cloud8 小时前
亚马逊云渠道商:AWS Lightsail的常见问题怎么解决?
运维·服务器·云计算·aws
Irene19918 小时前
Docker 与 Node 版本管理工具对比(npm pnpm)
docker
炼丹精神小伙8 小时前
VS Code 多跳板机连到目标服务器
运维·服务器
草莓熊Lotso8 小时前
Python 基础语法完全指南:变量、类型、运算符与输入输出(零基础入门)
运维·开发语言·人工智能·经验分享·笔记·python·其他
晚霞的不甘8 小时前
Flutter + OpenHarmony 发布与运维指南:从上架 AppGallery 到线上监控的全生命周期管理
运维·flutter·harmonyos
测试人社区—小叶子8 小时前
DevTestOps成熟度模型:从CI/CD到质量门禁
java·运维·网络·人工智能·测试工具·ci/cd·自动化