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