简介
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