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

相关推荐
nxb5569 小时前
haproxy算法,ip透传,自定义haproxy错误页面
运维·服务器
AKAMAI9 小时前
你的源服务器可能是你做出的最昂贵决定
运维·人工智能·云计算
Dxy123931021610 小时前
Linux 编译安装 Python 3.12.10(多版本共存,不破坏系统Python)
linux·运维·python
技术深耕者11 小时前
AI Agent从演示到生产:企业进入“自动化层”时代
运维·人工智能·自动化
w678200713 小时前
Prisma不能优雅的支持DTO,试试Vona ORM吧
linux·运维·ubuntu
APItesterCris13 小时前
Open Claw 实战教程:5 分钟搭建京东商品自动化监控与数据分析系统
大数据·运维·数据库·数据仓库·自动化
杨某不才14 小时前
如何能让Linux服务器对shell 终端 + sftp 文件传输长期保活
linux·运维·服务器
杨云龙UP15 小时前
生产环境Oracle表空间扩容实战:使用Toad for Oracle图形界面新增Datafile(ASM+OMF)
linux·运维·数据库·oracle·表空间·asm 存储管理·toad
三言老师16 小时前
文本工具组合统计服务器日志数据
linux·运维·服务器
m0_7436975916 小时前
DNS服务器
运维·服务器