8.5 Swarm网络

实验概述
本实验将带你深入了解 Swarm 的 Overlay(覆盖)网络。你将亲手构建一个跨主机的网络环境,部署 MySQL 和 Typecho 博客应用,并验证利用服务名(Service Name)进行服务发现的能力。

在 Docker Swarm 集群中,为了让不同主机(节点)上的容器能够互相通信,我们需要使用 Overlay(覆盖)网络

如下图所示,Overlay 网络就像在底层物理网络之上铺了一层虚拟的大网,无论容器运行在哪个节点上,只要连接到这个 Overlay 网络,它们就能像在同一个局域网里一样直接通信。

首先,我们需要创建一个驱动类型为 overlay 的网络。这个网络将作为接下来部署的数据库和博客应用之间的通信桥梁。

bash

docker network create --driver overlay blog-net-[学号后两位]

为什么要用 Overlay 网络?
普通的 bridge 网络只能让同一台机器上的容器通信。而在 Swarm 集群中,服务可能会被调度(分配)到不同的机器上运行,Overlay 网络就是专门解决这种跨主机通信问题的。

查看刚才创建的网络,确认它已经存在:

bash

docker network ls

接下来部署 MySQL 数据库。我们需要通过环境变量 (-e) 指定 root 密码、数据库库名、用户名和密码,并将其加入刚才创建的网络。

bash

docker service create \
--name blog-db-[学号后两位] \
--network blog-net-[学号后两位] \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=typecho \
-e MYSQL_USER=typecho \
-e MYSQL_PASSWORD=typecho \
mysql:8
服务名很重要
请务必记清楚你设置的 --name 服务名(例如 blog-db-01)。 在 Docker Swarm 网络中,服务名可以直接作为域名使用。后续部署博客应用连接数据库时,必须使用这个名字。如果名字写错了,应用就找不到数据库了。

查看任务运行状态,等待状态变为 Running

bash

docker service ps blog-db-[学号后两位]

现在部署博客的前端应用。我们将容器的 80 端口映射到宿主机的 8000+[学号后两位] 端口。

bash

docker service create \
--name blog-server-[学号后两位] \
--network blog-net-[学号后两位] \
-p 8000+[学号后两位]:80 \
joyqi/typecho:nightly-php7.4-apache
访问测试
部署完成后,打开浏览器,访问 集群中任意节点的 IP + 端口号(例如 192.168.x.x:8001)。如果一切正常,你应该能看到 Typecho 的安装欢迎界面。

步骤 1:安装配置 Typecho

在浏览器中按照提示进行安装。

数据库地址填什么?

在配置数据库连接信息时,数据库地址 一栏 千万不要localhost127.0.0.1

必须填写数据库的服务名blog-db-[学号后两位]

步骤 2:查看任务分布

观察一下你的服务分别运行在哪些节点上,体会 Swarm 的调度功能:

bash

# 查看 Web 服务运行在哪个节点
docker service ps blog-server-[学号后两位]

# 查看 数据库 服务运行在哪个节点
docker service ps blog-db-[学号后两位]

步骤 3:查看网络详情

你可以登录到 运行了相关容器任务 的节点上,查看本地的网络信息,验证 Overlay 网络是否自动同步到了该节点。

bash

docker network ls

相关内容