0Pricing
DevOps Bootcamp · 课时

容器网络基础

理解 Docker 的默认网络和桥接网络,以及容器如何发现彼此

容器网络基础 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。

为什么需要容器网络?

容器在设计上彼此隔离,这有利于安全性和可移植性。不过,应用要发挥作用,通常需要相互通信并与外部世界通信。

这正是 Docker 网络发挥作用的地方!它允许容器安全、高效地相互通信。

容器网络基础 — 插图 1

Docker 的默认桥接网络

如果运行容器时未指定网络,Docker 会自动将其连接到默认桥接网络。该网络的名称是 bridge。

此网络上的容器可以使用各自的 IP 地址相互通信,也可以访问互联网。

检查 Docker 网络

您可以轻松查看系统上所有可用的 Docker 网络。docker network ls 命令会列出这些网络,而 docker network inspect 会提供指定网络的详细配置。

尝试列出您的网络:

docker network ls

容器 IP 地址

连接到桥接网络(默认网络或用户自定义网络)的每个容器,都会由 Docker 的内部 DNS 服务器分配一个独有的 IP 地址。

此 IP 地址允许同一网络上的其他容器访问它。下面来查看某个容器的 IP:

docker run --rm -it alpine ip a

默认桥接网络中的通信

在默认的 bridge 网络中,容器可以使用分配到的 IP 地址相互通信。不过,IP 地址可能会发生变化,因此对于动态应用而言,这种方式不够可靠。

若要更好地按名称发现容器并与其通信,用户自定义桥接网络是现代且首选的方案。

用户自定义桥接网络

用户自定义桥接网络相比默认桥接网络具有显著优势:

  • 自动 DNS 解析:同一用户自定义网络中的容器可以通过服务名称(即容器名称)找到彼此。
  • 更好的隔离性:它们能为应用提供更好的隔离。
  • 可配置性:您可以更好地控制网络设置。

演示:通过名称进行通信

让我们创建一个自定义网络,在其中运行 Nginx 网络服务器,然后使用另一个容器通过名称访问 Nginx 服务器。看看这有多简单!

docker network create my-app-net
docker run -d --name webserver --network my-app-net nginx
docker run --rm --network my-app-net alpine sh -c "apk add curl && curl -s http://webserver"
docker rm -f webserver
docker network rm my-app-net

向主机公开端口

要从主机或外部网络访问容器中的服务,您需要使用 -p 或 --publish 标志“发布”或“映射”其端口。

例如,-p 8080:80 会将主机的 8080 端口映射到容器的 80 端口。

docker run -d --name my-webserver -p 8080:80 nginx
# To check, open http://localhost:8080 in your browser
# Then, clean up the container:
docker rm -f my-webserver

其他网络驱动程序

除了桥接网络之外,Docker 还针对特定使用场景提供了其他网络驱动程序:

  • Host:容器共享主机的网络协议栈,因此会失去隔离性。
  • None:容器没有网络接口。
  • Overlay:用于 Docker Swarm,使不同主机上的多个 Docker 守护进程能够相互通信。

每种驱动程序都在不同的部署场景中发挥独特作用。

网络挑战

关于 Docker 的默认 bridge 网络和用户自定义桥接网络,以下哪些说法是正确的?

回顾:网络基础

我们已经介绍了 Docker 网络的基础知识:

  • 默认 bridge 网络允许容器通过 IP 相互通信。
  • 用户自定义桥接网络支持按名称自动进行 DNS 解析,并能提供更好的隔离性,因此更受推荐。
  • 我们学习了如何让容器相互通信,以及如何将容器端口公开给主机。
  • 我们还简要了解了 host 和 overlay 等其他网络驱动程序。

理解网络对于构建相互连接的容器化应用至关重要。接下来,我们将深入了解如何使用 Docker 卷管理持久化数据!

常见问题解答

「容器网络基础」课时是免费的吗?

是的 — 「容器网络基础」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。

「容器网络基础」这节课中我会学到什么?

理解 Docker 的默认网络和桥接网络,以及容器如何发现彼此 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 DevOps Bootcamp 需要有经验吗?

无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「容器网络基础」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 DevOps Bootcamp 课中编写并运行代码吗?

能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 容器网络基础
  2. 使用 Docker 卷实现持久化
  3. 绑定挂载与 tmpfs 挂载
  4. 自定义桥接网络与服务发现
← 返回 DevOps Bootcamp