如何在 Ubuntu 22.04 上安装 Docker Swarm
Docker Swarm 是构建在 Docker Engine 之上的容器编排。它允许您在多个服务器上创建和部署 Docker 节点集群。 Docker Swarm 将容器化应用程序部署简化为服务。它提供了一种简单、最简单的方法来管理和编排容器。
Docker Swarm 提供了高水平的可用应用程序。在 Docker Swarm 中,您可以在多个节点上运行单个应用程序或服务,这些节点称为“工作节点”。还有一个称为“Swarm Manager”的节点,它是 Docker Swarm 的中央管理和编排。
在本教程中,我们将向您展示如何在 Ubuntu 22.04 服务器上逐步安装 Docker Swarm 软件。
先决条件
要完成本指南,请确保您配备以下设备:
- 3 台 Ubuntu 服务器 22.04 - 一台将用作 Swarm Master/Manager,两台服务器将用作工作节点。
- 具有 sudo 管理员权限的非 root 用户。
设置系统
在安装 Docker 和配置 Docker Swarm 之前,您必须通过完成以下任务来准备系统:
- 打开 Docker Swarm 的端口:您必须在所有服务器上打开 Docker Swarm 使用的一些端口。这可以通过 UFW(简单防火墙)来实现。
- 添加 Docker 存储库:您将使用官方 Docker 存储库将 Docker 引擎安装到所有服务器。
为 Docker Swarm 打开端口
在下一部分中,您将为 SSH 打开端口 22,然后为 SSH 打开端口 2377、7946 和 4789 Docker Swarm 通过 Swarm Master/Manager 和 Swarm 节点上的 UFW(简单防火墙)。 UFW 默认安装,但尚未启动。
首先,运行下面的 ufw 命令添加 OpenSSH 应用程序配置文件并打开默认 SSH 端口 22。然后,启动并启用 UFW。
sudo ufw allow OpenSSH
sudo ufw enable
输入 y 继续,您应该会得到输出防火墙处于活动状态并在系统启动时启用。
现在运行以下命令来打开 Swarm 部署上的服务将使用的端口。在这种情况下,您将为服务分配 30000:35000 之间的端口。
sudo ufw allow 30000:35000/tcp
接下来,执行以下命令为 Docker Swarm 打开端口。
for ports in 2377/tcp 7946/tcp 7946/udp 4789/udp
do
sudo ufw allow $ports
done
最后,重新加载 UFW 并通过执行以下命令验证 UFW 状态。
sudo ufw reload
sudo ufw status
您应该会看到 OpenSSH 应用程序配置文件以及 Docker Swarm 的端口,包括在 UFW 上启用的 2377、7946 和 4789。
添加 Docker 存储库
配置 UFW 后,您必须将官方 Docker 存储库添加到您的服务器。您将使用官方 Docker 存储库来安装 Docker 引擎。
执行以下命令将一些基本软件包安装到您的 Ubuntu 服务器。
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y
接下来,运行以下命令将 Docker GPG 密钥和存储库添加到您的系统。
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
最后,通过执行以下命令来更新并刷新每台服务器上的 Ubuntu 存储库。
sudo apt update
您应该看到在此过程中正在获取 Docker 存储库。
安装 Docker 引擎
准备好 Ubuntu 系统后,您将在这些服务器中安装 Docker 引擎。
使用以下命令将 Docker Engine 安装到您的 Ubuntu 系统。输入 y 确认安装。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安装完成后,运行下面的systemctl命令来验证docker服务并确保该服务正在运行。
sudo systemctl is-enabled docker
sudo systemctl status docker
在以下输出中,您应该看到 docker 服务正在运行并已启用。
(可选):允许非 Root 运行 Docker 容器
如果您要使用非 root 用户部署 Docker Swarm 并运行容器,则必须将您的用户添加到 docker 组,以便该用户可以执行 docker 命令并运行容器。
运行下面的 usermod 命令将当前用户添加到 docker 组。
sudo usermod -aG docker username
现在以非 root 用户身份登录并执行下面的 docker 命令来验证您的配置。
su - username
docker run hello-world
如果配置成功,您应该能够运行容器 hello-world 并获得以下输出:
创建 Docker Swarm
现在您已经安装了 Docker 引擎,您可以使用 Ubuntu 服务器创建并启动 Docker。在此示例中,我们将使用一台服务器作为 Swarm Master/Manager,使用两台服务器作为工作节点。
完成以下任务来设置 Docker Swarm:
- 在 Master/Manager 上初始化 Swarm 模式。
- 将工作节点添加到 Docker Swarm。
让我们开始。
在 Master/Manager 上初始化 Swarm 模式
要初始化 Docker Swarm,请运行下面的 docker swarm init 命令。附加参数 --advertise-addr 会将 Docker Swarm 绑定在特定的 IP 地址内,参数 --default-addr-pool 确定在 Swarm 上运行的容器的内部 IP 地址。
在本例中,Docker Swarm 模式将绑定 IP 地址 192.168.5.30,容器的 IP 地址池为 10.20.0.0/16。
docker swarm init --advertise-addr 192.168.5.30 --default-addr-pool 10.20.0.0/16
如果初始化过程成功,将显示以下输出。在输出中,您应该看到生成的用于将节点添加到 Docker Swarm 的令牌。
接下来,运行以下命令来检查 Swarm 模式状态。
docker info
如果启用了 Swarm 模式,您应该获得输出 Swarm: active 以及 NodeID 的详细信息以及 Manager 和 Node 的状态。
最后,执行以下命令来验证 Docker Swarm 上的节点列表。
docker node ls
此时,您的 Docker Swarm 上只有一个节点可用,即 Swarm Master/Manager。
将工作节点添加到 Docker Swarm
Docker Swarm 初始化后,您可以将工作节点添加到 Docker Swarm。
首先,运行以下命令以显示为工作节点生成的令牌。
docker swarm join-token worker
您应该看到有关添加工作节点的说明,其中包括令牌。
现在,移动到工作节点并通过执行下面的 docker swarm join 命令将工作节点添加到 Docker Swarm。
docker swarm join --token SWMTKN-1-0i6kbe2oek1iw19jfpvd2j5l0dhfmssz4w505aeihx7ouz8wqc-2dbk7cnmo12uunj53eywwnqr7 192.168.5.30:2377
当该过程成功时,输出“此节点作为工作人员加入了集群”将打印在屏幕上。
接下来,返回 Swarm Master/Manager 并运行以下命令来验证可用节点列表。
docker node ls
如果一切顺利,Docker Swarm 上将有 3 个可用服务器,1 个 Swarm Manager 和 2 个状态为“就绪”且可用性正在运行的工作节点。
在 Docker Swarm 中运行服务
至此,您已经成功创建了具有三台 Ubuntu 服务器的 Docker Swarm。现在,您将学习如何将应用程序部署到 Docker Swarm(称为服务)中。服务是微服务应用程序的映像,它可以是 HTTP 服务器、数据库服务器或其他应用程序。
在此示例中,您将使用 Nginx 映像部署一个简单的 HTTP 服务。
执行以下命令在 Swarm 上创建新服务。在此示例中,您将创建一个具有 1 个副本的新服务 test-nginx,公开端口 30001,并基于 nginx:alpine 映像。
docker service create --replicas 1 --name test-nginx -p 30001:80 nginx:alpine
现在,使用以下命令检查 test-nginx 服务的详细信息。
docker service inspect test-nginx
docker service inspect --pretty test-nginx
您应该会看到有关 test-nginx 服务的详细信息,如下所示。
接下来,使用以下命令验证 Docker Swarm 中的 Docker 服务列表。
docker service ls
docker service ps test-nginx
如果成功,您应该看到 test-nginx 服务在 NODE 管理器上运行,具有 1 个副本并公开端口 30001。
最后,使用下面的curl命令通过主机IP地址和端口30001访问test-nginx服务。
curl 192.168.5.30:30001
curl -I 192.168.5.30:30001
您应该看到index.html 源代码页和HTTP 标头的详细信息。
Docker Swarm 中的扩展服务
现在您已经部署了 Docker 服务,下一个任务是在 Docker Swarm 上扩展该服务。这将在工作节点之间创建所需的服务复制。
要扩展服务,请运行下面的 docker service scale 命令。在本例中,您将 test-nginx 服务扩展到 3 个副本。
docker service scale test-nginx=3
现在运行以下命令来验证 test-nginx 服务。如果 test-nginx 服务扩展,您应该会看到 Docker 创建的另外两个服务并在两个工作节点上运行。
docker service ps test-nginx
移至工作节点终端并运行以下命令以确保 test-nginx 服务正在运行。
docker ps
curl 192.168.5.31:30001
如果一切顺利,您应该在每个工作节点上看到状态为 Up 的容器 test-nginx.RANDOM-STRING。
删除 Docker Swarm 中的服务
要清理环境,您需要从 Docker Swarm 中删除 test-nginx 服务,并删除 nginx:alpine docker 镜像。
删除 test-nginx 服务并使用以下命令验证 Docker Swarm 上的可用服务列表。
docker service rm test-nginx
docker service ps
现在删除 nginx:alpine 映像并使用以下命令检查每个服务器的下载映像列表。
docker rmi nginx:alpine
docker images
结论
总而言之,您现在已经在 Ubuntu 22.04 上成功一步步安装了 Docker Swarm。您已经使用三台 Ubuntu 服务器部署了 Docker Swarm,并了解了如何在 Docker Swarm 上部署、扩展和删除应用程序或服务。