Docker 网络入门指南

你好,未来的 Docker 大师们!我很高兴能成为你们在这激动人心的 Docker 网络世界中的向导。作为一个教计算机科学多年的老师,我可以告诉你,理解 Docker 网络就像学习如何在繁忙的新城市街道上导航——一开始可能会感到不知所措,但一旦你掌握了它,你很快就会像当地人一样自如地穿梭!

Docker - Networking

什么是 Docker 网络?

在我们深入细节之前,让我们从基础开始。Docker 网络本质上是指 Docker 容器之间以及与外部世界如何进行通信。把它想象成你容器的邮政系统——它是它们如何发送和接收消息和数据的方式。

列出所有 Docker 网络

让我们开始我们的冒险,学习如何在我们的 Docker 环境中查看有哪些网络可用。这就像查看我们新城市的地图,以了解我们可以走哪些路线。

要列出所有 Docker 网络,我们使用这个简单的命令:

docker network ls

当你运行这个命令时,你将看到类似以下的输出:

网络ID     名称      驱动    范围
9f904ee27bf5   bridge    bridge    local
95e74588f40d   host      host      local
6dd90d006c9b   none      null      local

让我们分解一下:

  • 网络ID:每个网络的唯一标识符
  • 名称:网络的名称
  • 驱动:使用的网络驱动(我们稍后会更多地讨论这些)
  • 范围:网络的范围(本地于 Docker 主机或 swarm)

检查 Docker 网络

既然我们能看到我们的网络,让我们更仔细地查看其中一个。这就像在我们的地图上放大特定的街道。

要检查 Docker 网络,我们使用:

docker network inspect [网络名称]

例如,让我们检查默认的 'bridge' 网络:

docker network inspect bridge

这个命令将以 JSON 格式返回关于网络的很多详细信息。这就像获得关于那条街道上发生的所有事情的详细报告——谁住在那里,房子看起来如何等等。

创建你自己的新网络

好的,现在我们准备建设我们自己的道路!在 Docker 中创建新网络出奇地简单:

docker network create [选项] [网络名称]

让我们创建一个简单的桥接网络:

docker network create my_awesome_network

恭喜你!你刚刚创建了你的第一个 Docker 网络。就像你在我们的 Docker 城市中铺设了一条新街道。

为了验证我们的网络是否已创建,我们可以再次使用我们可靠的 docker network ls 命令:

docker network ls

你现在应该在网络列表中看到你的新网络!

网络驱动

在 Docker 中,网络驱动就像不同类型的道路。让我们看看主要的类型:

驱动 描述
Bridge 默认的网络驱动。适用于需要通信的独立容器。
Host 移除容器和 Docker 主机之间的网络隔离。
Overlay 用于连接多个 Docker 守护进程。适用于 swarm 服务。
Macvlan 允许你为容器分配一个 MAC 地址,使其在你的网络上看起来像物理设备。
None 为容器禁用所有网络。

创建网络时,你可以指定驱动。例如:

docker network create --driver overlay my_overlay_network

这会创建一个新的覆盖网络,这在处理 Docker Swarm 时非常棒。

将容器连接到网络

现在我们有了网络,让我们学习如何将容器连接到它们。这就像决定我们的房子(容器)应该位于哪条街道上。

当你运行一个新的容器时,你可以指定它应该连接到哪个网络:

docker run --network=my_awesome_network nginx

这个命令会运行一个 nginx 容器并将其连接到我们的 'my_awesome_network'。

你也可以将现有容器连接到网络:

docker network connect my_awesome_network my_existing_container

如果你想要将容器从网络断开连接:

docker network disconnect my_awesome_network my_existing_container

现实世界的例子

让我们通过一个实际的例子来把所有这些放在一起。想象我们正在构建一个简单的 Web 应用程序,有一个前端和一个后端。我们希望这些容器能够相互通信,但我们不希望将后端暴露给外部世界。

首先,让我们创建我们的网络:

docker network create my_app_network

现在,让我们运行我们的后端容器并将其连接到我们的网络:

docker run --name backend --network=my_app_network -d my-backend-image

最后,是我们的前端容器:

docker run --name frontend --network=my_app_network -p 80:80 -d my-frontend-image

现在我们的前端和后端容器可以通过 'my_app_network' 相互通信,但只有前端在端口 80 上对外界开放。

结论

就是这样,朋友们!我们已经穿越了 Docker 网络的基础,从列出和检查网络到创建我们自己的网络并连接容器。记住,像任何技能一样,掌握 Docker 网络需要练习。不要害怕尝试和尝试不同的配置。

在我们结束之前,我想起了一个学生曾经告诉我,学习 Docker 网络感觉就像学习游泳——一开始,你感觉像是在信息的海洋中溺亡,但一旦你掌握了它,你就能轻松地滑过概念。所以继续划水,在你意识到之前,你将在 Docker 网络中畅游!

快乐地使用 Docker,愿你的容器总能找到回家的路!

Credits: Image by storyset