浅析 Docker 内置网络模式
引言
Docker 提供了多种内置的网络模式,用于在容器之间建设网络连接。这篇文章将浅析这些网络模式,包含桥接网络、主机网络、无网络模式和 Overlay 网络等。咱们将探讨每种网络模式的优缺点、实用场景。
桥接网络(Bridge Network)
概念
桥接网络是 Docker 的默认网络模式。在桥接网络中,Docker 会为每个容器创立一个虚构网络接口,并为容器调配一个 IP 地址。容器能够通过桥接网络与主机和其余容器进行通信。
长处
- 隔离性:每个容器都有独立的网络命名空间,相互之间隔离,不会相互烦扰。
- 简略易用:桥接网络是默认的网络模式,无需额定配置,容器能够间接进行通信。
-
跨主机通信:能够通过端口映射实现容器与主机之间的通信,也能够应用 Overlay 网络实现跨主机通信。
毛病
- 性能损失:桥接网络须要进行网络地址转换(NAT),可能会引入肯定的性能损失。
-
端口抵触:如果多个容器应用雷同的端口号,可能会导致端口抵触。
利用场景
- 桥接网络实用于单主机上的多个容器之间的通信,例如微服务架构中的多个服务容器之间的通信。
- 尽管在国内各大云厂商在 docker 容器中应用调配的公网 ipv6 地址通信, 比拟繁琐, 然而也属于一种利用场景, 其实如果想应用 ipv6 的话, 能够通过应用内置的主机网络模式实现。
-
如果你的业务场景决定你必须应用桥接模式中的 ipv6 网络, 这个举荐一篇文章可能会解决你的问题 > https://zhuanlan.zhihu.com/p/400379696
如何应用
桥接网络是默认的网络模式,无需额定配置。通过 docker run 命令创立容器时,能够应用 –network bridge 参数指定应用桥接网络, 当然因为是默认的, 也能够抉择不加。
因为桥接网络须要进行网络地址转换(NAT)实现的, 所以个别在应用时, 都会将服务端口映射进去 -p [hostPort]:[containerPort]最佳实际
- 应用自定义网络:为容器创立自定义的桥接网络,能够更好地治理容器之间的通信和连贯。
-
应用容器名称进行通信:通过为容器指定名称,不会创立本人的网卡,配置本人的 IP,而是和一个指定的容器共享 IP、端口范畴等。
#1 docker network create my-network docker run --network=my-network --name=containemy-image1 docker run --network=my-network --name=container2 my-image2 #从 Docker 1.10 版本开始,docker daemon 实现了一个内嵌的 DNS server,使容器能够间接通过容器名称通信。这样,容器 1 和容器 2 能够通过它们的容器名称 "container1" 和 "container2" 进行通信,而不用记住它们的 IP 地址
#2 如下图 docker run --name=container1 my-image1 docker run --name=container2 --network container:[container1] my-image2 #这样, 就能够将 container2 和 container1 组成同一个网络, 即 container2 不会创立本人的网卡,配置本人的 IP,而是和一个指定的容器共享 IP、端口范畴等
主机网络(Host Network)
概念
在主机网络模式下,容器与主机共享网络命名空间,间接应用主机的网络接口和 IP 地址。容器能够通过主机网络与主机和其余容器进行通信。
长处
- 性能劣势:与桥接网络相比,主机网络模式能够提供更高的网络性能,因为容器间接应用主机的网络接口,无需进行额定的网络地址转换。
-
简化网络配置:容器与主机共享网络命名空间,无需进行端口映射或网络转发配置。
毛病
- 安全性升高:容器与主机共享网络命名空间,容器能够间接拜访主机上的网络资源,可能会减少平安危险。
-
端口抵触:如果多个容器应用雷同的端口号,可能会导致端口抵触。
利用场景
- 主机网络模式实用于对网络性能要求较高的场景,例如须要间接拜访主机上的网络资源或与主机进行高性能通信的容器。
-
应用主机调配的公网 ipv6 地址进行通信, 而后你就相当于领有了一个双协定的服务容器了
如何应用
- 在创立容器时,能够应用 –network host 参数指定应用主机网络模式。
-
开启 docker 中的 ipv6
vim /etc/docker/daemon.json 退出这两行, 就会开启 ipv6, 前提是你的主机曾经调配了 ipv6 地址哟 { "ipv6": true, #这个前缀是你去云厂商或者去路由表查到的 ip -6 route show dev eth0 "fixed-cidr-v6": "2402:xxx:xxxx:xxx::/64" }
最佳实际
- 留神端口抵触:因为容器与主机共享网络命名空间,须要确保容器应用的端口号在主机上是惟一的。
-
思考安全性:主机网络模式可能会升高容器的安全性,须要审慎应用,并确保适当的安全措施。
# 容器与主机共享网络命名空间,间接应用主机的网络接口和 IP 地址 docker run --network=host --name=container1 my-image1
无网络模式(None Network)
概念
在无网络模式下,容器没有网络接口,与内部网络齐全隔离。这种模式实用于不须要网络连接的容器,例如批处理工作或与网络无关的利用。
长处
- 安全性加强:无网络模式下的容器与内部网络齐全隔离,能够提供更高的安全性。
-
资源节俭:无网络模式下的容器不须要网络接口和 IP 地址,能够节俭网络资源。
毛病
-
无奈进行网络通信:容器无奈与内部网络或其余容器进行通信。
利用场景
无网络模式实用于不须要网络连接的容器,例如执行离线工作或与网络无关的利用。
如何应用
在创立容器时,能够应用 –network none 参数指定应用无网络模式。
最佳实际
留神容器需要:确保抉择无网络模式的容器真正不须要进行网络通信,以防止性能受限或无奈满足业务需要。
Overlay 网络(Overlay Network)
概念
Overlay 网络模式容许在多个 Docker 主机之间创立一个虚构网络,容器能够通过该网络进行通信。这种模式实用于跨主机的容器集群,能够提供容器之间的跨主机通信和服务发现性能。
长处
- 跨主机通信:Overlay 网络模式容许容器在不同的 Docker 主机之间进行通信,能够构建跨主机的容器集群。
-
服务发现:Overlay 网络模式集成了服务发现性能,容器能够通过服务名称进行通信,而不须要关注底层网络配置。
毛病
-
网络复杂性:Overlay 网络模式引入了额定的网络管理和配置复杂性,包含网络插件、路由配置和网络隧道等。
利用场景
Overlay 网络模式实用于构建分布式应用程序、容器编排平台和跨主机容器通信等场景。
如何应用
创立 Overlay 网络须要应用 Docker Swarm 或 Kubernetes 等容器编排平台。在创立网络时,能够指定网络的驱动程序和配置参数。
最佳实际
- 应用容器编排平台:Overlay 网络模式通常与容器编排平台(如 Docker Compose,Docker Swarm 或 K8S)一起应用,以实现跨主机容器通信和服务发现性能。
- 网络安全性:在应用 Overlay 网络模式时,须要留神网络安全性,确保网络通信受到适当的爱护和访问控制。
作者:傻傻三多
出处:https://www.sssd.top/archives/1692144004974
版权:本作品采纳「署名 - 非商业性应用 - 雷同形式共享 4.0 国内」许可协定进行许可。
本文由博客一文多发平台 OpenWrite 公布!