清华主页 - 清华新闻 - 综合时讯 - 正文

【云原生】Docker 的网络通信

Docker 网络通信。

  • 1.Docker 容器网络通信的基本原理
    • 1.1 查看 Docker
    • 1.2容器网络 宿主机与 Docker 在容器中建立网络通信的过程
  • 2.使用命令查看 Docker 网络配置信息
  • 3.Docker 的 4 网络通信模式
    • 3.1 bridge 模式。
    • 3.2 host 模式。
    • 3.3 container 模式。
    • 3.4 none 模式。
  • 4.容器间通信。
    • 4.1 通过 IP 通信地址
    • 4.2 通过 Docker DNS Server 通信。
    • 4.3 通过 Joined 通信方式
    • 4.4 集装箱之间的跨节点通信
      • 4.4.1 三种方式。
      • 4.4.2 Overlay 网络与注册中心
  • 5. 网络访问控制容器。
    • 5.1 访问外部网络进行容器应用。
    • 5.2 从外部网络访问容器中的应用。

在这里插入图片描述

Docker 宿主机虚拟机上运行的容器。这些虚拟机相互独立,彼此之间没有界面󿀌也就是说,容器是相互的。 逻辑隔离。是的。

所以󿀌如何实现容器的相互通信?容器如何访问外部网络?如何访问外部网络部署在容器中的应用?本博客将引导您了解这些问题。

1.Docker 容器网络通信的基本原理。

Docker 默认情况下,容器中的网络接口为 虚拟接口。。虚拟接口最大的优点是转发效率高。这是因为 Linux 虚拟接口之间的数据转发࿰通过在内核中复制数据来实现c;发送接口缓存中的数据包将直接复制到接收接口的缓存中,无需通过外部物理网络设备进行交换。

⭐ 虚拟接口和正常的以太网卡没有太大区别c;只是它的速度比以太网卡快得多。

Docker 网络得到了很好的利用 Linux 虚拟网络技术,在宿主机的物理网卡和容器中创建虚拟接口(veth。),并让它们通过宿主机。 docker0。网桥连接󿀌我们把这样的一对。 veth。叫做。 veth pair。

在这里插入图片描述

1.1 查看 Docker

基于容器网络 CentOS 创建容器࿰的镜像c;并进入容器。

docker。run。 -it。centos /bin/bash。

为了查看容器的网络信息,安装在容器内。 net-tools。网络工具。

yum。 install。-y。net-tools。

打开宿主机命令行窗口,执行以下命令查看宿主机。 docker0。网桥信息。

ifconfig。

执行以下命令在容器内查看容器网络信息。

ifconfig。

容器中的网络宿主机的地址网络地址相同。 flag。。这说明创建容器时,它将成对地创建。 veth pair。,它们通过宿主机。 docker0。网桥通信。

1.2 宿主机与 Docker 在容器中建立网络通信的过程

在这里插入图片描述

2.使用命令查看 Docker 网络配置信息

使用以下命令查看 Docker 网络通信模式。

docker。network。 ls。

查看。 bridge。模型的详细信息。

docker。network inspect 20ca9d84d5b4。

3.Docker 的 4 网络通信模式

3.1 bridge 模式。

bridge。模式是 Docker 默认的网络通信模式,是开发者最常用的模型。在。

bridge。 ࿰模式下c;Docker 引擎将创建一个独立的网络命名空间。这样,每个命名空间中运行的容器都有独立的网卡和其他网络资源。使用。

bridge。 该模式可以非常方便地实现容器之间的网络隔离,以及容器与宿主机之间的网络隔离。使用宿主机docker0。 网桥,可实现多个容器(甚至外部网络)网络通信。3.2 host 使用模式。

host。

࿰模式c;与宿主机共享相同的网络命名空间,容器的 IP 宿主机的地址 IP 地址相同。如果宿主机有公共网络 IP 地址,容器也有这个公网。 IP 地址。也就是说,宿主机可以直接使用容器 IP 地址与外界通信,宿主机的端口࿰也可以直接用于容器内服务的端口c;不需要任何转换。 因为在。host。

宿主机的转发࿰不再需要在模式下进行c;因此,它的性能有了很大的提高。 尽管使用。host。
在这里插入图片描述
通过模式非常方便。 localhost。或者。 127.0.0.1.实现容器与宿主机的相互访问,性能也比较好,但这种模式也存在以下两个问题: 因为容器使用了宿主机的网络环境,因此,网络环境的隔离功能减弱,导致宿主机和容器争夺网络资源。容器本身不再拥有所有的网络资源,与宿主机共享网络资源宿主机和容器使用相同的网络资源 IP 地址,这不利于网络的配置和管理。

  • 3.3 container 模型。在。
  • container。

࿰模式下c;网络环境将在容器之间共享。也就是说,一个容器将使用另一个容器的网络命名空间。因此,,在这种࿰模式下c;它可以通过容器之间。

localhost。 或者。127.0.0.1. 相互访问,从而提高了传输效率。 ⭐。 container。该模式节省了网络资源,但在这种模式下运行的容器没有网络隔离。Container 网络的隔离性在。

bridge。 网络与。host。 网络之间。container。 在某些特殊场景中,模式非常有用。例如,在 K8s 中创建 Pod 时,会首先创建 Pod 基本容器;而 Pod 使用其他容器。container。

通信模式和基本容器。Pod 使用中间的每个容器 localhost 或者。127.0.0.1. 通信,从而将 Pod 所有容器在中间形成逻辑整体3.4 none 模式。 none。该模式下的容器具有独立的网络命名空间,但是没有任何网络配置。只能通过 Local Loopback 通信网卡和容器#xff0c;也就是说,只能用。
在这里插入图片描述

localhost。

或者。127.0.0.1. 访问容器。none。在模式下,需要手动配置网络,例如使用。

pipwork。 指定容器的工具 IP 地址等。4.容器间通信。 4.1 通过 IP 通信地址。在宿主机上创建容器时,Docker 保护过程将自动分配虚拟的每个新创建的容器 IP 但是,外部网络无法通过这种虚拟 IP 访问容器中的应用程序地址。

⭐ 这个虚拟 IP 地址只提供 Docker 内部容器相互通信。也就是说,通过这个 IP 地址实现了 Docker 内容器之间的连接

4.2 通过 Docker DNS Server 通信。在实际使用过程中,通过容器的虚拟 IP 容器间地址的相互通信对管理和维护非常不利。

从 Docker 1.10 版本开始󿀌Docker 引擎有一个嵌入式发动机 DNS Server。有了它,容器之间可以通过容器名称直接通信。这种通信方式也很简单,启动容器时,使用。

--name。

参数可以用容器命名。

docker。

run。 -it。--network。

=bridge2。 --name。box1 busybox。docker。run。 -it。--network。=bridge2。 --name。box2 busybox。bridge2。是一个。 bridge。自定义网络的模式。
  • busybox。一个集成了100多个最常用的 Linux 软件工具箱的命令和工具。 box1。、。
  • box2.是容器名称。
  • 例如,在容器中。box1。内执行。ping。

命令,确认是否可以使用容器名与对方通信。 ping。box2。 4.3 通过 Joined 通信的方式。Joined 是 Docker 发动机提供的一种特殊的容器间通信方式,本质上是用的。

container。模式。因为在。

container。

࿰模式下c;多个容器共享相同的网络环境,还共享网卡配置。所以,在。 container。࿰模式下c;可直接通过容器。 localhost。或者。 127.0.0.1.通信。 例如,在。box2。 容器,通过。wget 127.0.0.1.

可以直接访问命令。 box1。容器 HTTP 服务。 4.4 容器之间的跨节点通信。在同一个宿主机中,可以使用多个不同的容器。docker0。 网桥直接通信。并且在实际项目中,一个复杂的系统通常需要部署多个组件,为了提高组件的运行效率,这些组件通常部署在不同的主机上。所以在 Docker 如何实现容器间的跨节点通信?4.4.1 三种方式。

通过宿主机上容器的端口映射实现通信。

。通过这种方式实现容器间的跨节点通信,宿主机需要转发,所以使用起来很不方便。 通过 Docker Overlay 网络实现通信。.这样,容器本身的虚拟可以直接使用 IP 相互通信地址,这与不同容器之间在同一宿主机上运行的通信方式完全相同。Docker 原生的 Overlay 网络是实现容器跨节点通信的主流方式。应使用它 Overlay 网络,需要注册中心的支持。

容器间的跨节点通信通过第三方网络实现。

  • 4.4.2 Overlay 网络与注册中心。Overlay 在不改变现有网络的前提下,网络是,对 IP 报纸包装数据,从而利用 IP 实现数据转发功能的路由协议。在 Overlay ࿰在网络中c;通过扩展标识符可以支持 16M 的用户。
  • Docker 的 Swarm 集群便是 Overlay 实现网络,而使用 Overlay 网络需要注册中心的支持。注册中心可以提供注册和发现功能的服务。Docker 有支持的注册中心。Zookeeper。
  • 、。Consul。

和。

ETCD。

5. 网络访问控制容器。5.1 访问外部网络的应用程序在容器中。在默认情况下,外部网络通过宿主机访问容器中的应用。docker0。网桥。当容器中的应用程序需要访问外部网络时,,宿主机需要转发。 宿主机可以通过执行以下指令来确定 Linux 是否开启了 IP 数据包转发功能。sysctl。

net.ipv4.ip_forward。

假如回来了。

1 1。󿀌这意味着它已经打开了。

如果返回。

0                                  0.0
  • ࿰。c;这意味着它没有打开。 可以执行以下句子来打开此功能。 sysctl。-w。
  • net.ipv4.ip_forward。 = 1.打开此功能的另一种方式是,在启动 Docker 指定服务时的参数。

--ip-forward=true。

。这样 Docker 宿主机将在守护过程中自动使用。ip_forward。设置为参数。1                              1.1.1.

从外部网络访问容器中的应用。 运行在宿主机上的容器,允许从外部网络访问其内部应用,这主要是通过。-p。 实现参数。在创建容器时指定。 -p。 参数,可以将容器内的某个端口绑定到宿主机,完成宿主机和容器的端口映射。基本质是:在宿主机。iptable。

在表中添加相应的路由转发规则,对访问外部 IP 转换地址的数据包,将其访问的目标地址修改为容器 IP 以及集装箱中的端口地址。

基于 Nginx 创建容器࿰的镜像c;并将容器的。 80 80.80.

端口映射到宿主机。 1234 1234.1234. 端口。docker。

run。 -d。 -p。1234。 :80 nginx。 在宿主机上,查看以下命令。iptable。

表中的路由转发规则。iptables。 -t。nat。-L。-n。

|。 grep。1234。

2025-06-24 11:49:52

相关新闻

清华大学新闻中心版权所有,清华大学新闻网编辑部维护,电子信箱: news@tsinghua.edu.cn
Copyright 2001-2020 news.tsinghua.edu.cn. All rights reserved.