如何在 Rocky Linux 上安装 Docker Swarm 集群

简介

Docker Swarm是建立在Docker Engine之上的容器编排工具。它允许你创建和部署多个服务器的Docker节点集群。Docker Swarm简化了你的容器化应用程序部署为服务。提供了一种简单且最容易的方式来管理和编排容器。

Docker Swarm为应用程序提供了高级的可用性。在Docker Swarm中,你可以在多个节点上运行单个应用程序或服务,这些节点被称为"工作节点"。还有一个节点被称为"Swarm Manager",它是Docker Swarm的中心管理和编排。

本教程将向你展示如何使用Rocky Linux服务器设置Docker Swarm。你将在每台服务器上安装Docker,设置firewalld,初始化Swarm Manager,并添加节点,最后,你还将学习Docker Swarm的基本用法,用于部署容器化应用程序。

接下来,我将一步一步教大家如何进行安装和部署!!

准备工作

服务器准备

必要前提:

  • 一个充满求知欲的大脑。
  • 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。

我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。

注册链接: https://rainyun.ivwv.site

创建雨云服务器

以下步骤仅供参考,请根据实际需求选择配置。

  • 点击 云产品云服务器立即购买
  • 选择距离你较近的区域,以保证低延迟。
  • 按照自己需求选择配置,选择 RockyLinux 版本,按照自己需求是否预装Docker。
  • 最后按照提示进行购买。
  • 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。
  • 我们使用 PowerShell 进行 SSH 远程连接到服务器,Win+R 打开运行窗口,输入 powershell 后点击确定。
  • 输入 ssh root@你的服务器IP 例如 ssh root@154.9.227.239 回车后,首次需要输入 yes,再次回车后即可登录服务器。
  • 到此为止,我们的云服务器就远程连接上了。

开始部署

条件

要完成本教程,你至少需要三台Rocky Linux服务器和一个具有sudo/管理员权限的非root用户。

对于此演示,我们将使用以下详细信息的三台Rocky Linux服务器:

主机名         IP地址          用途
---------------------------------------------------
swarm-manager1 192.168.5.100   Swarm Manager
worker1        192.168.5.120   Node
worker2        192.168.5.121   Node

有了所有这些要求,你就可以开始Docker Swarm部署了。

安装Docker

要设置Docker Swarm,你必须在每台机器/服务器上安装Docker Engine。对于Rocky Linux发行版,你可以通过官方Docker仓库安装Docker。

现在你将在每台Rocky Linux服务器上安装Docker Engine。

通过以下dnf命令为Rocky Linux系统添加Docker仓库。

bash 复制代码
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

添加仓库后,运行以下dnf命令以验证仓库列表并更新所有软件包。

bash 复制代码
sudo dnf repo list
sudo dnf update

如果添加了Docker仓库,你将看到以下输出:

接下来,通过以下dnf命令安装Docker。当提示确认安装时,输入y 并按ENTER继续。

bash 复制代码
sudo dnf install docker-ce docker-ce-cli containerd.io

安装Docker后,通过以下systemctl命令启动并启用'docker '服务。'docker'服务应该正在运行,并将在系统启动时自动运行。

bash 复制代码
sudo systemctl enable docker
sudo systemctl start docker

最后,使用以下命令验证'docker'服务,确保服务正在运行。

bash 复制代码
sudo systemctl status docker

如果'docker'服务正在运行,你应该得到如下输出。

此外,如果你想以非root用户身份运行Docker,你必须将用户添加到'docker'组,通过以下命令。

bash 复制代码
sudo usermod -aG docker user

设置firewalld

在生产环境中,你应该在每台服务器上启用防火墙。在默认的Rocky Linux系统上,firewalld默认是启用的。所以你只需要为Docker Swarm部署添加一些TCP和UDP端口。

以下是你必须在每台服务器上打开的TCP和UDP端口,以便部署Docker Swarm并使其正常运行:

  • TCP端口2377用于集群管理通信 - 如果你有多个Swarm Managers。
  • TCP和UDP端口7946用于节点间通信 - 对于Swarm环境中的所有节点。
  • UDP端口4789用于覆盖网络流量

通过以下firewall-cmd命令将Docker Swarm端口添加到firewalld。

bash 复制代码
sudo firewall-cmd --add-port=2377/tcp --permanent
sudo firewall-cmd --add-port=7946/tcp --permanent
sudo firewall-cmd --add-port=7946/udp --permanent
sudo firewall-cmd --add-port=4789/udp --permanent

接下来,重新加载firewalld规则,并使用以下命令验证firewalld上的端口列表。

bash 复制代码
sudo firewall-cmd --reload
sudo firewall-cmd --list-port

你应该看到一些TCP和UDP端口已添加到firewalld,用于Docker Swarm部署。

有了Docker引擎在每台服务器上安装和firewalld配置,你现在可以通过初始化第一个节点为"Swarm manager"来设置Docker Swarm部署。

初始化Swarm Manager

Swarm Manager是你的Docker Swarm环境的大脑。对于大型部署,你可以将多个服务器添加为Swarm manager,这使得你的Swarm Manager具有高可用性和容错能力。

Swarm Manager是你的Docker Swarm的集群管理器,它管理你的应用程序部署的状态,并且与Docker Engine集成。Swarm Manager提供了声明性服务模型和服务扩展,服务的期望状态,并且还提供滚动更新。

在这个例子中,我们将使用IP地址"192.168.5.100 "初始化服务器"swarm-manager1"作为Swarm Manager。

在"swarm-manager1 "服务器上运行以下命令"docker swarm init",开始初始化你的部署上的Swarm Manager。

在这个例子中,Swarm Manager运行在IP地址"192.168.5.100 ",Docker Swarm上服务的默认网络将是"10.10.0.0/16"。

bash 复制代码
docker swarm init --advertise-addr 192.168.5.100 --default-addr-pool 10.10.0.0/16

现在,当Swarm Manager初始化后,你应该看到以下截图类似的输出。你还可以看到你需要添加工作节点到你的Docker Swarm部署的指令,包括必须使用的生成的token。

接下来,运行以下docker命令以验证Swarm模式是否激活并启用。

bash 复制代码
docker info

你将看到Swarm模式是"active ",并且服务的网络IP地址是"10.10.0.0/16 ",这与初始化过程中的配置相同。此外,你还可以看到当前Docker Swarm上可用的节点只有"1"。

通过"docker node"命令验证你的Docker Swarm上可用的节点列表。你将看到你的Docker Swarm部署上只有一个节点。

bash 复制代码
docker node ls

向Swarm添加工作节点

在Docker Swarm中,工作节点与其他容器编排的概念相同,即容器执行和运行的地方。必须在每个工作节点上安装Docker Engine,并且工作节点也可以提升为"Swarm Manager"。

同时,Swarm Manager也可以用作工作节点,这意味着你的应用程序也可以在Swarm Manager上运行。

运行以下"docker swarm join "命令将"worker1 "和"worker2"服务器添加到Docker Swarm。同时,请确保将token替换为你环境中生成的token。

bash 复制代码
docker swarm join \\
--token SWMTKN-1-4qxedy87gygenejrw06hlqpuwfm6erulccfj1jhnmsn0kehbnb-2ld4g3zo36bzu8d8ss4115rhq 192.168.5.100:2377

当你收到"This node joined a swarm as a worker"这样的输出消息时,这意味着工作节点已添加。

你可以看到当"worker1 "和"worker2"加入Docker Swarm时类似的输出。

接下来,再次转到Swarm Manager并运行以下docker命令以验证你的Docker Swarm上的节点列表。

bash 复制代码
docker node ls

你应该看到你的Docker Swarm环境中有三个节点。在这个例子中,"swarm-manager1 "用作Swarm Manager,而"worker1 "和"worker2"服务器用作工作节点。

此外,你也可以使用以下docker命令验证节点列表。

bash 复制代码
docker info

在Swarm Manager服务器上,你可以看到以下截图的输出。有1个经理和3个节点(swarm-manager也用作工作节点)。

但是,在"worker1 "和"worker2"服务器上,你将看到如下的输出。你可以看到带有默认TCP端口2377的Swarm Manager IP地址。

此时,你已经使用Rocky Linux完成了Docker Swarm部署。接下来,你将部署应用程序/服务到你的Swarm环境。

在Docker Swarm上管理服务

当你将应用程序部署到Docker Swarm环境时,该应用程序将被称为"服务"。它是你微服务应用程序的镜像,可以是HTTP服务器、数据库服务器或其他应用程序。

要部署Docker Swarm上服务,你应该指定你将使用的基镜像、端口、服务的特定名称,以及服务的副本数量。

现在你将学习如何在Docker Swarm上基本部署服务。

在这个例子中,你将创建一个名为"test-httpd "的新服务,1个副本 ,并在Swarm节点上暴露端口"8000 "。你将使用的镜像是"httpd:alpine"。

运行以下"docker service"命令以创建一个新服务。

bash 复制代码
docker service create --replicas 1 --name test-httpd -p 8000:80 httpd:alpine

现在通过以下docker命令验证你的Docker Swarm上的服务。你应该看到服务"test-httpd"正在运行,并且暴露了TCP端口8000,只有1个副本。

bash 复制代码
docker service ls

接下来,通过以下命令检查"test-httpd"服务的详细信息。

bash 复制代码
docker service inspect test-httpd
docker service inspect --pretty test-httpd

下面你可以看到"test-httpd"的详细服务。

此外,你还可以通过以下"docker service"命令检查在"test-httpd"服务上运行的容器。

bash 复制代码
docker service ps test-httpd

你可以看到"test-httpd.1 "容器正在"swarm-manager1"服务器上运行。

现在使用以下firewall-cmd命令在所有服务器上打开端口"8000"。

bash 复制代码
sudo firewall-cmd --add-port=8000/tcp

之后,使用以下curl命令验证"test-httpd "服务。在这个例子中,"swarm-manager1 "的IP地址是"192.168.5.100"。

bash 复制代码
curl 192.168.5.30:8000
curl -I 192.168.5.30:8000

你将看到"test-httpd"服务的默认index.html页面。

在Docker Swarm上扩展服务

在你在Docker Swarm上部署服务后,现在你将学习如何扩展你的服务和应用程序。

运行以下命令将"test-httpd "服务扩展到3个副本。此命令将在工作节点上创建另外两个"test-httpd"服务。

bash 复制代码
docker service scale test-httpd=3

现在,使用以下命令验证正在运行的服务列表。你应该看到另一个"test-httpd "服务正在"worker1 "和"worker2"服务器上运行。

bash 复制代码
docker service ps test-httpd

最后,通过以下curl命令在"worker1 "和"worker2"服务器上验证服务。如果服务正在运行,你应该在屏幕上看到默认的index.html页面。

检查worker1上的服务。

bash 复制代码
docker ps
curl worker1:8000

检查worker2上的服务。

bash 复制代码
docker ps
curl worker2:8000

在Docker Swarm上删除服务

你已经学会了在Docker Swarm上基本部署和扩展服务。接下来,你将通过删除"test-httpd"服务来清理你的Docker Swarm环境。

运行以下命令从Docker Swarm中删除"test-httpd"服务。

bash 复制代码
docker service rm test-httpd

之后,通过以下"docker service inspect "命令验证"test-httpd"服务。你应该看到服务已被删除。

bash 复制代码
docker service inspect test-httpd

此外,你还可以通过以下docker命令验证,检查你的Swarm上正在运行的容器和镜像列表。

你应该看到容器已被移除,并且httpd:alpine镜像在所有服务器上可用。

bash 复制代码
docker ps
docker images

结论

在本教程中,你已经使用三台Rocky Linux服务器部署了Docker Swarm。你还学习了在Linux服务器上安装Docker Engine以及在Rocky Linux系统上配置Firewalld。最后,你还学习了通过"docker service"命令将基本应用程序部署到Docker Swarm。

从这里开始,你现在可以将所有依赖项的容器化应用程序部署到Docker Swarm。你还可以添加更多的Swarm Manager以设置Docker Swarm环境的高可用性。

相关链接

雨云 - 新一代云服务提供商: https://rainyun.ivwv.site

我的博客:https://blog.ivwv.site

相关推荐
王同学要变强20 分钟前
docker login 出错 Error response from daemon
运维·docker·容器
咖啡虫23 分钟前
学习 Dockerfile 常用指令
docker
迷路爸爸18029 分钟前
Rustdesk 安装客户端以及自己搭建服务器跑通参考资料
运维·服务器
烁月_o936 分钟前
网络安全之漏洞
linux·网络·安全·web安全·信息与通信
roman_日积跬步-终至千里40 分钟前
【Neo4J】neo4j docker容器下的备份与恢复
docker·容器·neo4j
咖啡虫43 分钟前
Docker 常用命令大全
docker
hyf_code1 小时前
Midjourney Describe API 的对接和使用
java·服务器·midjourney
PanYu——BJ1 小时前
Linux 安装NFS共享文件夹
linux·运维·服务器
IT修炼家1 小时前
Ubuntu server安装中文支持
linux·服务器·ubuntu
IT-民工211101 小时前
k8s前后端分离部署实践
云原生·容器·kubernetes