如何在 Debian 11 上安装 Docker Swarm如何在 Debian 11 上安装 Docker Swarm如何在 Debian 11 上安装 Docker Swarm如何在 Debian 11 上安装 Docker Swarm
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Debian 11 上安装 Docker Swarm

在此页

  1. 先决条件
  2. 安装 Docker
  3. 设置防火墙
  4. 初始化 Swarm Manager
  5. 将工作节点添加到 Swarm
  6. 在 Docker Swarm 上管理服务
  7. 在 Docker Swarm 上扩展服务
  8. 删除 Docker Swarm 上的服务
  9. 结论

Docker Swarm 是一个构建在 Docker Engine 上的容器编排。它允许您创建和部署具有多个服务器的 Docker 节点集群。 Docker Swarm 简化了容器化应用程序在服务中的部署。 Docker Swarm 提供了一种简单直接的方法来管理和编排容器。

Docker Swarm 为应用程序提供高级别的可用性。在 Docker Swarm 中,您可以在称为“工作节点”的多个节点上运行单个应用程序或服务。还有一个名为“Swarm Manager”的节点,它提供 Docker Swarm 的集中管理和编排。

本教程向您展示如何在 Debian 11 服务器上设置 Docker Swarm。您将安装 Docker、设置 UFW(简单防火墙)、初始化“Swarm Manager”并添加“节点”。您还将学习 Docker Swarm 部署应用程序的基本用法。

先决条件

要完成本教程,您将需要多个 Debian 11 服务器和一个具有 sudo/root 管理员权限的非 root 用户。

在此演示中,我们将使用三台 Debian 11 服务器,详细信息如下:

Hostname    IP Address        Used as
-------------------------------------
manager     192.168.5.100     Swarm Manager
node1       192.168.5.120     Node
node2       192.168.5.121     Node

满足所有这些要求后,您就可以开始了。

安装 Docker

默认的 Debian 存储库为 Docker 提供了一个包。但是,为确保您安装的是最新版本的 Docker,您将通过官方 Docker 存储库安装 Docker。

此外,您必须在所有 Debian 服务器上安装 Docker。

在添加存储库之前,运行以下 apt 命令来安装一些基本包。当提示确认安装时,输入 Y 并按 ENTER。

sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y

安装基本包后,使用以下命令为 Docker 存储库添加 GPG 密钥。使用此命令,您将创建一个新目录 \/etc/apt/keyrings\ 并将 Docker 存储库的 GPG 密钥存储在其中。

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

接下来,使用以下命令为 Debian Linux 系统添加 Docker 存储库。

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

现在,通过下面的 apt 命令更新和刷新您的包索引。

sudo apt update

您将看到正在更新的新 Docker 存储库。

接下来,使用以下 apt 命令安装 Docker 包。系统将要求您确认安装,输入 Y 确认,然后按 ENTER 继续。

sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

安装 Docker 后,运行以下命令启动并启用 docker 服务。这允许 docker 在系统启动时自动运行。

sudo systemctl start docker
sudo systemctl enable docker

最后,通过下面的 systemctl 命令验证 docker 服务。

sudo systemctl status docker

如果 docker 服务正在运行,您应该会看到类似于以下屏幕截图的输出:

此外,如果您计划使用非 root 用户进行部署,则必须将您的用户添加到 docker 并允许该用户运行 Docker 容器。

sudo usermod -aG docker user

设置防火墙

如果您正在为生产部署 Docker Swarm,则必须在所有节点之间设置防火墙。在此示例中,您将使用 UFW 作为 Debian 服务器的默认防火墙。

以下是 Docker Swarm 正常工作必须打开的一些端口:

  • 用于集群管理通信的 TCP 端口 2377 - 如果您有多个 Swarm Manager,则使用此端口。
  • 用于节点间通信的 TCP 和 UDP 端口 7946 - 适用于 Swarm 环境中的所有节点。
  • 覆盖网络流量的 UDP 端口 4789

使用以下 apt 命令将 UFW 安装到您的 Debian 系统。

sudo apt install ufw -y

安装 UFW 后,运行以下 ufw 命令以添加“OpenSSH”应用程序配置文件。然后,启动并启用 UFW。

在此过程中,系统会要求您确认是否运行并启用 UFW 防火墙。输入 y 确认并按 ENTER 继续。

sudo ufw allow "OpenSSH"
sudo ufw enable

现在运行以下 ufw 命令为 Docker Swarm 打开一些端口。

sudo ufw allow 2377/tcp
sudo ufw allow 7946/tcp
sudo ufw allow 7946/udp
sudo ufw allow 4789/udp

最后,通过以下 ufw 命令验证服务器上启用的 UFW 规则列表。确保 Docker Swarm 的所有端口都已启用并在 UFW 上可用。

sudo ufw status

此时,您已经安装了 Docker 并配置了 UFW。接下来让我们初始化 Swarm Manager。

初始化 Swarm Manager

Swarm Manager 是 Docker Swarm 部署的中心。它自己管理 swarm 状态,并且对管理器节点的数量没有限制。部署多个 Swarm Manager 将创建一个容错环境。

Swarm Manager 是与 docker Engine 集成的集群管理。它提供声明式服务模型、服务扩展、所需的服务状态、负载平衡和滚动更新。

在本例中,您将初始化一个节点作为 Swarm Manager。

要初始化 Swarm Manager,请运行以下 docker 命令。在此示例中,Swarm 管理器将在 IP 地址 192.168.5.30 上运行。 Docker Swarm 环境中的容器网络为 10.20.0.0/16。

docker swarm init --advertise-addr 192.168.5.30 --default-addr-pool 10.20.0.0/16

初始化 Swarm Manager 时,您将看到以下输出。此外,您还可以看到用于将节点加入 Swarm 管理器的详细信息令牌。

现在,运行以下 docker 命令以验证 Swarm 模式是否已启用。

docker info

在下面的屏幕截图中,您可以看到 Swarm 模式处于“活动”状态,IP 地址池为“10.20.0.0/16”。此外,Docker Swarm 上可用的当前节点是“1”。

您可以通过下面的 docker 命令验证 Docker Swarm 上的节点列表。您应该看到当前 Docker Swarm 上只有一个节点,即 Swarm Manager。

docker node ls

将工作节点添加到 Swarm

工作节点是容器执行和运行的地方。在工作节点上,必须在每个服务器上安装 Docker 引擎,并且工作节点也可以提升为 Swarm 管理器。

要添加工作节点,您可以使用“docker swarm join”命令,然后使用初始化 Swarm Manager 时生成的令牌。

通过下面的“docker swarm join”命令将 node1 和 node2 服务器添加到 Docker Swarm。您可以在 Swarm Manager 初始化期间将令牌替换为您生成的令牌。

docker swarm join \
--token SWMTKN-1-5tui5dveqw6n2b0m6suut0w7nf9w0wb5jyvfhmykb4jdehps1j-ag99f7750mmnim6ao5yp0x3s2 \
192.168.5.30:2377

添加节点时,您将获得输出消息,例如“此节点作为工作人员加入了集群”。

下面是您将在 node1 和 node2 服务器上看到的输出。

此外,如果您丢失了加入工作节点的 swarm 令牌,您可以使用以下命令显示。

docker swarm join-token worker

最后,返回“管理器”服务器并通过下面的“docker”命令验证 Docker Swarm 环境中的节点列表。

docker node ls

在下面的屏幕截图中,您可以看到 \node1\ 和 \node2\ 都已添加到 Docker Swarm,状态为 \Ready\ 并且 docker engine 为 \20.10.18\。

Docker Swarm 部署完成,您现在可以将容器化应用程序部署到 Swarm。

在 Docker Swarm 上管理服务

服务是在 Docker Swarm 上部署应用程序的术语。它是微服务的镜像,可以是 HTTP 服务器、数据库服务器或将在 Docker Swarm 上运行的其他应用程序。

要在 Docker Swarm 中设置服务,您必须指定要使用的映像、要公开的端口以及副本数。

部署 Docker Swarm 后,您现在将学习将服务基本部署到 Docker Swarm。

通过命令“docker service create”创建一个新服务“test-httpd”,如下所示。

在此示例中,您将使用 1 个副本创建一个新服务“test-httpd”,并在 Swarm 节点上公开端口“8000”。您将使用的图像是 \httpd:alpine\。

docker service create --replicas 1 --name test-httpd -p 8000:80 httpd:alpine

\test-httpd\ 服务运行后,使用以下命令进行验证。您应该看到服务“test-httpd”正在运行 1 个副本并公开 TCP 端口 8000。

docker service ls

现在,运行以下命令来检查详细信息服务 \test-httpd\。

docker service inspect test-httpd
docker service inspect --pretty test-httpd

下面你可以看到“test-httpd”的详细服务,包括副本数、外部端口、你使用的基础镜像等。

您还可以通过“docker service ps”命令检查“test-httpd”服务上正在运行的容器,如下所示。

docker service ps test-httpd

您可以看到“test-httpd.1”容器正在“管理器”服务器上运行。

现在通过下面的 ufw 命令在所有服务器上打开端口 \8000\。

sudo ufw allow 8000/tcp

然后,使用 curl 命令验证 \test-httpd\ 服务,如下所示。 \192.168.5.30\ 是 Swarm Manager IP 地址,\test-httpd\ 服务在端口 8000 上运行。

curl 192.168.5.30:8000
curl -I 192.168.5.30:8000

您将看到“test-httpd”服务的默认 index.html 页面。

在 Docker Swarm 上扩展服务

现在您将学习如何在 Docker Swarm 上扩展您的服务。

运行以下命令将“test-httpd”服务扩展到 3 个副本。

docker service scale test-httpd=3

现在使用以下命令验证 \test-httpd\ 服务上正在运行的容器。您应该在服务器管理器、node1 和 node2 上运行的“test-http”服务上看到三个不同的容器。

docker service ps test-httpd

最后,运行以下 docker 命令来验证 node1 和 node2 服务器上正在运行的容器。您应该会看到名为“test-httpd.random name”的容器正在两台服务器上运行。此外,您还可以看到可以通过 TCP 端口 8000 访问该容器。

检查 node1 上的容器。

docker ps
curl node1:8000

检查节点 2 上的容器。

docker ps
curl node2:8000

删除 Docker Swarm 上的服务

现在是通过删除已部署到 Docker Swarm 的服务来清理环境的时候了。

运行以下命令从 Docker Swarm 中移除和删除服务“test-httpd”。

docker service rm test-httpd

然后,通过下面的“docker service inspect”命令验证“test-httpd”服务。您应该会看到该服务已被删除。

docker service inspect test-httpd

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

您应该看到容器已被删除,并且 httpd:alpine 图像在所有服务器上都可用。

docker ps
docker images

结论

在本教程中,您已经部署了带有三个 Debian 11 服务器的 Docker Swarm。您还学习了 Linux 服务器上 Docker Engine 的基本安装和 Debian 系统上 UFW 防火墙的基本配置。最后,您还学习了通过“docker service”命令将基本应用程序部署到 Docker Swarm。

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

©2015-2025 艾丽卡 support@alaica.com