在运行 Docker 应用程序时,绝大多数情况下我们需要使用 Docker Network 来实现容器之间的联通性。Docker Network 提供了多种网络类型,以适应不同的应用场景,例如:bridge
,host
,overlay
,macvlan
等等,本文将深入探讨 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