如何使用 docker swarm init 命令初始化 Swarm

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何使用 docker swarm init 命令初始化一个 Docker Swarm。你将从初始化一个基本的 Swarm 开始,以了解其基本过程。

在基本初始化的基础上,你将进一步探索更高级的场景。这包括使用特定的通告地址(advertise address)初始化 Swarm 以控制网络通信、启用自动锁定(autolock)以增强安全性,以及配置自定义的数据路径端口。通过这些步骤,你将获得设置和定制 Docker Swarm 环境的实践经验。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/SystemManagementGroup -.-> docker/info("Display System-Wide Information") subgraph Lab Skills docker/ls -.-> lab-555240{{"如何使用 docker swarm init 命令初始化 Swarm"}} docker/rm -.-> lab-555240{{"如何使用 docker swarm init 命令初始化 Swarm"}} docker/inspect -.-> lab-555240{{"如何使用 docker swarm init 命令初始化 Swarm"}} docker/info -.-> lab-555240{{"如何使用 docker swarm init 命令初始化 Swarm"}} end

初始化一个基本的 Swarm

在这一步中,你将学习如何初始化一个基本的 Docker Swarm。Docker Swarm 是 Docker 原生的集群和编排解决方案。它允许你创建和管理一个 Docker 节点集群。

在初始化 Swarm 之前,让我们先检查一下当前 Docker 的状态。

docker info

你应该会看到有关你 Docker 安装的信息。查找“Swarm”部分,它应该显示 Swarm 处于非活动状态。

要初始化一个基本的 Swarm,你将使用 docker swarm init 命令。这个命令会将当前的 Docker 主机转变为一个 Swarm 管理器(manager)。

docker swarm init

运行该命令后,你会看到输出信息,表明 Swarm 已初始化,并提供一个命令,用于让其他节点作为工作节点(worker)加入该 Swarm。

让我们验证一下 Swarm 是否已成功初始化。

docker info

现在,“Swarm”部分应该显示 Swarm 处于活动状态,并表明当前节点是一个管理器(manager)。

你还可以使用 docker node ls 命令来列出 Swarm 中的节点。

docker node ls

你应该会看到当前节点被列出,状态为“Ready”,角色为“Manager”。

使用特定的通告地址(advertise address)初始化 Swarm

在上一步中,你初始化了一个基本的 Docker Swarm。在这一步中,你将学习如何初始化一个 Swarm 并指定 Swarm 管理器(manager)向其他节点通告的地址。这在具有多个网络接口的环境中,或者当你想控制使用哪个地址进行 Swarm 通信时非常有用。

首先,你需要离开现有的 Swarm。你可以使用 docker swarm leave 命令来完成此操作。由于这是唯一的节点且它是一个管理器(manager),你需要使用 --force 标志。

docker swarm leave --force

你应该会看到确认该节点已离开 Swarm 的输出信息。

现在,让我们查找你当前机器的 IP 地址。你可以使用 ip addr show 命令,并查找与你的网络接口(通常是 eth0ens*)关联的 IP 地址。

ip addr show

确定你想用于 Swarm 通告地址(advertise address)的 IP 地址。例如,如果你的 IP 地址是 172.17.0.2,你将使用该地址。

现在,再次初始化 Swarm,但这次使用 --advertise-addr 标志指定通告地址(advertise address)。将 <YOUR_IP_ADDRESS> 替换为你找到的实际 IP 地址。

docker swarm init --advertise-addr <YOUR_IP_ADDRESS>

你会看到类似于基本初始化的输出信息,但加入命令现在将包含指定的通告地址(advertise address)。

要验证 Swarm 是否使用正确的通告地址(advertise address)进行了初始化,你可以检查 Swarm。

docker swarm inspect --pretty

在输出中查找 AdvertiseAddr 字段,它应该与你指定的 IP 地址匹配。

启用自动锁定(autolock)功能初始化 Swarm

在这一步中,你将学习如何启用自动锁定(autolock)功能来初始化一个 Docker Swarm。自动锁定(autolock)功能通过要求使用解密密钥在 Docker 守护进程重启后解锁 Swarm,有助于保护 Swarm 免受未经授权的访问。

首先,像上一步那样离开现有的 Swarm。

docker swarm leave --force

现在,使用 --autolock 标志初始化 Swarm。如果你想指定通告地址(advertise address),也可以再次使用 --advertise-addr 标志。将 <YOUR_IP_ADDRESS> 替换为你机器的 IP 地址。

docker swarm init --autolock --advertise-addr <YOUR_IP_ADDRESS>

当你使用 --autolock 初始化 Swarm 时,输出信息中将包含一个“Swarm auto-lock key”。务必将此密钥保存在安全的位置。 在 Docker 守护进程重启后,你需要使用它来解锁 Swarm。

要验证自动锁定(autolock)功能是否已启用,你可以检查 Swarm。

docker swarm inspect --pretty

在输出中查找 AutoLockManagers 字段,它应该被设置为 true

请注意,由于这是实验环境中的单节点 Swarm,你不会体验到守护进程重启后需要密钥才能解锁的自动锁定(autolock)功能的完整效果。不过,这一步展示了如何启用该功能。

使用自定义数据路径端口初始化 Swarm

在这一步中,你将学习如何初始化一个 Docker Swarm 并为数据路径网络指定一个自定义端口。数据路径网络用于 Swarm 节点之间的通信,以完成服务发现和负载均衡等任务。默认情况下,该网络使用端口 4789。如果该端口与你网络中的其他服务冲突,你可能需要更改此端口。

首先,离开现有的 Swarm。

docker swarm leave --force

现在,使用 --data-path-port 标志初始化 Swarm 并指定一个自定义数据路径端口。我们以端口 5789 为例。如果你愿意,还可以包含 --advertise-addr 标志和 --autolock 标志。将 <YOUR_IP_ADDRESS> 替换为你机器的 IP 地址。

docker swarm init --data-path-port 5789 --advertise-addr < YOUR_IP_ADDRESS > --autolock

你将看到初始化输出,如果你启用了自动锁定(autolock)功能,还会包含自动锁定密钥。

要验证是否已配置自定义数据路径端口,你可以检查 Swarm。

docker swarm inspect --pretty

在输出中查找 DataPathPort 字段,它应该显示你指定的自定义端口,在这个例子中是 5789

至此,使用各种选项初始化 Docker Swarm 的步骤就结束了。你已经学习了如何初始化一个基本的 Swarm、指定通告地址(advertise address)、启用自动锁定(autolock)功能以及设置自定义数据路径端口。

总结

在本次实验中,你学习了初始化 Docker Swarm 的基本流程。你首先使用 docker swarm init 命令初始化了一个基本的 Swarm,通过 docker info 观察了相关变化,并使用 docker node ls 验证了管理节点(manager)的角色。

随后,你探索了更高级的初始化选项。你学习了如何使用 docker swarm leave --force 离开现有的 Swarm,然后在重新初始化 Swarm 时使用 --advertise-addr 标志指定特定的通告地址(advertise address)。这展示了如何控制用于 Swarm 通信的网络接口。