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

相关推荐
汪碧康19 分钟前
xkube-v4.3版本的安全性进行了增强
docker·云原生·容器·kubernetes·xkube
Gl�ria21 分钟前
Hadoop MapReduce / Hive 场景:ReduceTask 热点 Key 排查
运维·hadoop·数据倾斜
EterNity_TiMe_35 分钟前
Pascal Editor 本地部署实战:Bun 启动 WebGPU 3D 编辑器,再解决公网访问报错
人工智能·docker·ai·容器·cpolar
snow@li39 分钟前
服务器运维:K3S 下 Jenkins ↔ GitLab 的 CI/CD 闭环 / 访问成功
运维·gitlab·jenkins
志栋智能1 小时前
超自动化运维与DevOps的深度融合
运维·网络·人工智能·安全·自动化
AugustSkys4 小时前
从 Docker 到 Containerd:Kubernetes 时代容器运行时完全指南
docker·容器·kubernetes·containerd
前端世界9 小时前
Linux服务器实战:NTP时间同步、SELinux权限与rsyslog日志管理,一次搞懂三大运维问题
linux·运维·服务器
Android系统攻城狮9 小时前
Linux Gstreamer深度解析之gst_audio_converter_new调用流程与实战(二十)
linux·运维·服务器·gstreamer音视频·音视频进阶
莫陌尛.9 小时前
Docker MySQL 删表卡死、执行超时(MDL锁阻塞)问题复盘与根治方案
mysql·docker·容器
海宇服务9 小时前
零信任架构实战:基于海宇对外投资历史查询服务构建自动化供应商准入网关
运维·人工智能·架构·自动化