小橘子大叔

  • 什么是 Docker 网络模式?
  • Bridge 网络模式
  • 总结:
  • 首页
  • nginx
  • Linux
  • docker
  • Kubernetes
  • Prometheus
  • 生活
  • 文章归档
  • 友情链接
  • Instagram
  • TikTok
  • X
欢迎随时联系本人
  • Mail

Docker网络服务

  • luxy
  • 2023-09-01
  • 5

什么是 Docker 网络模式?

            Docker容器是轻量级的独立单元,可以在同一主机上运行多个容器。为了让这些容器能够相互通信以及与外部世界进行交互,Docker提供了不同的网络模式。这些网络模式可以分为四大类:

  1. Bridge 网络模式:默认模式,用于在单个主机上运行多个容器,容器之间可以通过IP地址进行通信。将容器连接到一个docker0
  2. Host 网络模式:容器共享主机的网络栈,与主机共享相同的网络命名空间,使容器能够访问主机的网络接口。
  3. container 网络模式:新创建的容器不会创建自己的网IP,而是和一个指定的容器共享IP,端口范围等。
  4. None 网络模式:容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配 veth pair和网桥连接,ip等。

在本文中,我们将更详细地介绍Bridge网络模式。

Bridge 网络模式

        Bridge网络模式是Docker的默认网络模式,它为容器提供了一种简单的网络连接方式。在这种模式下,Docker引擎在主机上创建一个虚拟的网络桥接接口,容器连接到这个网络桥接接口。每个容器都会被分配一个唯一的IP地址,可以用于容器之间的通信。

       整个宿主机的网桥模式都是docker0,此时我们就把docker0看成是鲸鱼的一整张背吧,这个背上有许多接口,每个接口叫veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通,这样一对接口叫做veth pair,容器内部有一块虚拟网卡,每个接口叫eth0。docker0上的每个veth匹配某个容器实例内部的eth0。此时宿主机上的所有容器都连接到了这个内部网络上,即可完成两两容器间网络的互通。

        但要注意,使用bridge模式时,每当容器变动时,比如说重启容器或删除一个容器,容器的ip地址也会随之变动。这会对开发者造成一定的困扰

        要解决这个问题。可在Docker中利用服务名直接通信而不是IP地址。我们可以使用Docker内置的服务发现和DNS解析功能。Docker提供了内置的DNS服务器,它允许容器使用服务名称来解析其他容器的IP地址,而无需手动指定IP地址。以下是如何实现这一目标的一般步骤:

  1. 创建一个自定义的Docker网络:首先,创建一个自定义的Docker网络,这将允许容器在同一网络内通过服务名称进行通信。使用以下命令创建网络:

    docker network create my-network<br />
  2. 运行容器并将其连接到该网络:运行容器时,确保将它们连接到刚刚创建的自定义网络。您可以使用 --network 标志来指定容器连接到的网络。

    docker run -d --name container1 --network my-network your-image1<br /> docker run -d --name container2 --network my-network your-image2<br />

    请注意,container1 和 container2 是容器的名称,可以使用它们来识别容器,而不必担心它们的IP地址。

  3. 使用容器名称进行通信:现在,可以在一个容器中使用其他容器的名称来进行通信。Docker内置的DNS服务器将会为容器的名称提供IP地址解析。

    Docker将自动将 container2 解析为其IP地址,从而允许 container1 与 container2 进行通信。

  4. 重点!!!要想用上述方法解决该问题,一定要创建自定义网络!因为自定义网络本身就维护好了主机名和ip的对应关系!!!

下图容器创建时使用的是默认的网络模式,无法ping通

下图容器创建时使用了自定义的网络模式luxy,成功ping通

总结:

       Docker的网络功能为容器化应用提供了强大的灵活性和可扩展性。通过不同的网络模式,我们可以根据应用程序的需求选择合适的网络配置。在本博客中,重点介绍了Bridge网络模式,它是Docker的默认网络模式,适用于大多数单主机应用。

© 2025 小橘子大叔
Theme by Wing
  • {{ item.name }}
  • {{ item.name }}