Docker Swarm 是什么?

Docker Swarm 是一个运行在 Docker 平台上的容器编配工具。它帮助用户创建和管理 Docker 节点集群。Docker 集群是提供冗余的一个关键概念,当集群中的一个或多个节点发生故障时,Docker Swarm 可以进行故障转移。

Docker Swarm 使用标准的 Docker API 与其他工具 (例如 Docker Engine) 进行通信。它智能地将容器分配给工作节点,并通过调度容器使之在最合适的节点上运行,确保资源优化。

先决条件

为了演示 Docker Swarm 是如何工作的,我们有一个简单的集群,其中包括一个集群管理器节点和两个工作节点,如下所示。Manager 节点处理所有集群管理任务,而 worker 节点将运行容器。

  • swarm-manager 10.128.0.57
  • worker-node-1 10.128.0.58
  • worker-node-2 10.128.0.59

(第1步) 配置 Cluster hosts 文件

请登录每个节点,然后使用以下条目更新 /etc /hosts 文件

swarm-manager          10.128.0.57
worker-node-1          10.128.0.58
worker-node-2          10.128.0.59

接下来,确保所有节点可以相互 ping 通。

请在 swarm-manager 节点上执行以下命令

$ ping -c 4 10.128.0.58
$ ping -c 4 10.128.0.59

请在 worker-node-1 节点上执行以下命令

$ ping -c 4 10.128.0.57
$ ping -c 4 10.128.0.59

请在 worker-node-2 节点上执行以下命令

$ ping -c 4 10.128.0.57
$ ping -c 4 10.128.0.58

(第2步) 在所有节点上安装 Docker CE

我们将安装 Docker Community Edition (Docker CE),它可以免费安装和使用。

因此,登录到每个节点并更新本地包索引。

$ sudo apt update

接下来,安装安装过程中所需的依赖包

$ sudo apt install apt-transport-https ca-certificates curl software-properties-common -y

安装了所有软件包后,添加 Docker GPG 密钥

$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg

将官方的 Docker 软件源添加到你的 Ubuntu 22.04 系统中

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

接下来,更新本地包索引,使系统能够识别新添加的软件源。

$ sudo apt update

然后从官方软件源中安装 Docker

$ sudo apt install docker-ce -y

该命令将安装 Docker 以及 Docker 所需的其他包,以使其正常工作。

Install-docker-ce-apt-command-ubuntu

安装完 Docker 后,请将当前登录的用户添加到 Docker 组中,以避免每次运行 Docker 时都以 sudo 用户运行。

$ sudo usermod -aG docker ${USER}
$ newgrp docker

(第3步) 确认 Docker 在所有节点上运行

安装之后,Docker 守护进程会自动启动。可以验证服务是否正在运行,执行命令

$ sudo systemctl status docker

Docker-Service-Status-Ubuntu-22-04

另外,请确保启用 Docker 服务,以便它在启动时自动启动。

$ sudo systemctl enable docker

(第4步) 创建 Docker Swarm 集群

下一步是在管理器节点上初始化 Docker Swarm 集群。初始化之后,我们将向集群中添加工作节点。

要创建 Docker Swarm 集群,请运行命令:

$ sudo docker swarm init --advertise-addr 10.128.0.57

Docker-Swarm-Init-Ubuntu-22-04

一旦初始化完 Docker Swarm,将会在终端上显示加入 worker 节点到集群的命令。复制该命令,因为您需要像前面提到的那样在每个工作节点上运行它。

接下来,登录回每个 worker 节点并粘贴刚复制的命令以加入集群。

$ sudo docker swarm join --token SWMTKN-1-1k397e5o52cae0yipopqcu9werjcwuss1exbyj4635rrjjl723-7ocx56uhb7p1ri7h2u6ynxyno 10.128.0.57:2377

如果一切顺利,您应该会得到以下输出

Docker-Swarm-Join-Worker-Nodes-Ubuntu

接下来,确认所有节点都加入了集群,如下所示。

$ sudo docker node ls

您应该得到以下输出,显示集群中的所有节点。

List-Nodes-in-docker-Swarm-Ubuntu

(第5步) 测试 Docker Swarm 安装

要测试 docker 集群的安装,请转到 Manager 节点并将一个应用程序部署到集群中。在这个例子中,我们部署了一个 Nginx web 容器,并将它映射到主机上的 8080 端口。

$ sudo docker service create --name web-server --publish 8080:80 nginx:latest

Nginx-Based-Service-docker-swarm

接下来,验证已部署的应用程序服务的状态。

$ sudo docker service ls

List-Service-in-Docker-Swarm

(第6步) 创建服务副本

最后,创建服务的三副本,并在 Docker Manager 和 Worker 节点上进行扩展。

$ sudo docker service scale web-server=3

Service-Scale-docker-Swarm

接下来,确认副本的状态。这一次,你会注意到我们有 3 个副本。

Verify-Service-inDocker-Swarm

此时,Nginx web 容器应该运行在集群中所有的节点上,端口为 8080。要确认这一点,请访问您的浏览器,并从所有节点访问 web 服务器。

http://manager-node:8080

http://worker-node-1:8080

http://worker-node-2:8080

Nginx-Sample-Page-Docker-Swarm-Service

我的开源项目


鸠摩智首席音效师
472 声望9 粉丝

身强体健,龙精虎猛的活着。