详解 Docker Network

在运行 Docker 应用程序时,绝大多数情况下我们需要使用 Docker Network 来实现容器之间的联通性。Docker Network 提供了多种网络类型,以适应不同的应用场景,例如:bridgehostoverlaymacvlan 等等,本文将深入探讨 Docker Network 的实现原理、使用方法和实际应用。

Docker Network 实现原理

Docker Network 技术的本质是将容器封装在一个私有网络中,与主机物理网卡绑定的 Docker Bridge 就是其中的核心组件。每当我们在 Docker 中创建一个新容器时,Docker Engine 就会为该容器创建一个虚拟网络端口和一个虚拟 IP 地址,并将其添加到 Docker Bridge 的网络拓扑中,最终将容器的网络连接到物理主机的网络上。

除了 Docker Bridge,Docker 还支持多种网络插件,例如: Weave,Flannel,Calico,CNI 等,这些插件可以根据应用场景的不同,扩展 Docker Network 的功能,比如实现多主机间的容器互通等。

Docker Network 使用方法

1. 创建新的网络

使用 Docker 创建网络十分简单,语法如下:

- ------ ------- ------ --------- -------

其中,OPTIONS 可选参数,NETWORK 是新创建的网络名称。例如,使用如下命令创建一个名为 my-net 的网络:

- ------ ------- ------ ------

此时可以使用 docker network ls 命令查看所有已创建的网络:

- ------ ------- --
------- --     ----       ------    -----
------------   ------     ------    -----
------------   ----       ----      -----
------------   ------     ------    -----
------------   ----       ----      -----

可以看到,我们新创建的 my-net 网络已经成功添加到了 Docker 中。

2. 连接容器到网络

创建好网络之后,我们需要把容器连接到这个网络中。有两种方式来连接容器:

第一种方式:在启动容器时添加网络

- ------ --- ------ -------- --------- ------ -- ----- -- -----

在启动容器时使用 --network 参数,接着将容器连接到我们新创建的 my-net 网络中。

第二种方式:将容器连接到网络

我们还可以在已经启动的容器中连接到网络。假设我们已经有一个正在运行的 my-app 容器,使用如下命令将其连接到 my-net 网络:

- ------ ------- ------- ------ ------

3. 断开容器与网络的连接

使用如下命令可以断开容器与网络的连接:

- ------ ------- ---------- ------ ------

上面的命令将会把 my-app 容器从 my-net 网络中移除。

4. 删除网络

使用如下命令可以删除网络:

- ------ ------- -- --------- -------

其中,OPTIONS 可选参数,NETWORK 是待删除的网络名称。

- ------ ------- -- ------

Docker Network 实际应用

使用 Docker Network 服务,实现容器和容器、容器和主机之间的互联是其核心功能,但不同场景下需要不同类型的网络。下面我们来介绍几种 Docker Network 常用的场景:

1. 使用 bridge 网络模式

Docker 默认使用 Bridge 网络模式,当我们不显式指定网络模式时,将自动调用该模式。在 Bridge 网络模式下,启动 Docker 容器后,容器的网络配置将从 Bridge 网络的 dhcp 服务中获取。可以使用如下指令查看某个容器的 Bridge 信息:

- ------ ------- -------------- - ---- -- --------

2. 使用 host 网络模式

在 Host 网络模式下,Docker 容器直接使用宿主机的网络,其也使用宿主机的 Ip 和网卡,换句话说,如果在 Host 运行容器,则其无需暴露端口 --p 或 --expose,即可直接被宿主机访问。可以使用如下指令创建使用 Host 网络模式的容器:

- ------ --- ------ ----- --------- ---- -- -----

3. 使用 overlay 网络模式

在大规模容器化应用中,我们需要在不同的 Docker 主机之间建立一种局域网,以保证容器之间的通信。这时就需要使用 Overlay 网络模式。

使用 Overlay 网络模式前需要预先创建一个 Overlay 网络,下面的指令创建 Overlay 网络:

- ------ ------- ------ -- ------- ------------------

创建 Overlay 网络后,就可以在相关 Docker 主机之间启动容器并连接该网络。用法如下:

- ------ ------- ------ ---------- - ------ -- ----- -
  --------- ------------------ -
  --------- ----------------------------------- -
  ------- -----------------------------------------------------------

4. 使用 macvlan 网络模式

如果需要在容器中使用 DHCP 自动分配 IP 地址,可以使用 macvlan 网络模式。macvlan 网络模式的容器具有不同的 MAC 地址,有时甚至可以看到不同的 IP 地址。

示例代码

假设在共享网络中运行的容器之间需要进行通信。运行下面的指令,创建一个共享网络:

- ------ ------- ------ -----------------

接下来,启动两个容器并将它们连接到该共享网络:

- ------ --- ------ ---------- --------------------------- -- ------- ----- ----
- ------ --- ------ ---------- --------------------------- -- ------- ----- ----

然后,使用下面的指令在其中一个容器中测试网络连接:

- ------ ---- --- ---------- ---- ----------

这将向 container2 发送 ping,以检查网络是否成功连接。

结论

本文简单介绍了 Docker Network 的基本知识和操作,包括创建网络,连接容器,深度解析了 Docker Network 的实现原理和多种场景的实际应用。通过深入了解 Docker Network,我们可以更好的把握容器化技术的本质和应用;能够快速有效的实现不同场景下的计算资源的分配、协调和管理。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67025afad91dce0dc84733a9