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

相关推荐
缘华工业智维9 分钟前
CNN 在故障诊断中的应用:原理、案例与优势
大数据·运维·cnn
开航母的李大1 小时前
软件系统运维常见问题
运维·服务器·系统架构·运维开发
AI大模型2 小时前
基于 Docker 的 LLaMA-Factory 全流程部署指南
docker·llm·llama
华强笔记3 小时前
Linux内存管理系统性总结
linux·运维·网络
tb_first3 小时前
k8sday11服务发现(2/2)
docker·云原生·容器·kubernetes·k8s
拾心213 小时前
【运维进阶】Ansible 角色管理
运维·ansible
phoenix09814 小时前
ansible部署lnmp-allinone
linux·运维·ansible
发愤图强的羔羊4 小时前
Docker 搭建 SVN 服务器
docker
为了摸鱼而战4 小时前
Dockerfile知识点梳理,你要搞懂的都在这
docker
Clownseven5 小时前
Docker+Nginx+Node.js实战教程:从零搭建高可用的前后端分离项目
nginx·docker·node.js