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 所需的其他包,以使其正常工作。
安装完 Docker 后,请将当前登录的用户添加到 Docker 组中,以避免每次运行 Docker 时都以 sudo 用户运行。
$ sudo usermod -aG docker ${USER}
$ newgrp docker
(第3步) 确认 Docker 在所有节点上运行
安装之后,Docker 守护进程会自动启动。可以验证服务是否正在运行,执行命令
$ sudo systemctl status docker
另外,请确保启用 Docker 服务,以便它在启动时自动启动。
$ sudo systemctl enable docker
(第4步) 创建 Docker Swarm 集群
下一步是在管理器节点上初始化 Docker Swarm 集群。初始化之后,我们将向集群中添加工作节点。
要创建 Docker Swarm 集群,请运行命令:
$ sudo docker swarm init --advertise-addr 10.128.0.57
一旦初始化完 Docker Swarm,将会在终端上显示加入 worker 节点到集群的命令。复制该命令,因为您需要像前面提到的那样在每个工作节点上运行它。
接下来,登录回每个 worker 节点并粘贴刚复制的命令以加入集群。
$ sudo docker swarm join --token SWMTKN-1-1k397e5o52cae0yipopqcu9werjcwuss1exbyj4635rrjjl723-7ocx56uhb7p1ri7h2u6ynxyno 10.128.0.57:2377
如果一切顺利,您应该会得到以下输出
接下来,确认所有节点都加入了集群,如下所示。
$ sudo docker node ls
您应该得到以下输出,显示集群中的所有节点。
(第5步) 测试 Docker Swarm 安装
要测试 docker 集群的安装,请转到 Manager 节点并将一个应用程序部署到集群中。在这个例子中,我们部署了一个 Nginx web 容器,并将它映射到主机上的 8080 端口。
$ sudo docker service create --name web-server --publish 8080:80 nginx:latest
接下来,验证已部署的应用程序服务的状态。
$ sudo docker service ls
(第6步) 创建服务副本
最后,创建服务的三副本,并在 Docker Manager 和 Worker 节点上进行扩展。
$ sudo docker service scale web-server=3
接下来,确认副本的状态。这一次,你会注意到我们有 3 个副本。
此时,Nginx web 容器应该运行在集群中所有的节点上,端口为 8080。要确认这一点,请访问您的浏览器,并从所有节点访问 web 服务器。