docker network
用于管理 Docker 容器的网络,帮助你创建、查看、修改和删除网络,以及管理容器与网络的连接
常用命令
列出所有网络:docker network ls
查看网络详细信息:docker network inspect <network_name or id>
删除网络:docker network rm <network_name or id>
连接容器到现有网络:docker network connect <network_name or id> <container_name or id>
断开容器与网络的连接:docker network disconnect <network_name or id> <container_name or id>
创建带有指定驱动的网络:docker network create --driver
bridge
(默认):用于单机容器间的通信host
:容器与宿主机共享网络堆栈,适合需要极低网络延迟的场景overlay
:用于跨多个 Docker 主机的分布式网络,适合集群环境macvlan
:将容器暴露在物理网络上,并分配独立的 MAC 地址container
:容器与容器之间共享一个网络 IP 与端口空间- 示例:docker network create --driver bridge my-bridge-network
设置子网和网关(创建自定义网络时,你可以指定子网和网关):docker network create --subnet
docker network create --subnet 192.168.1.0/24 --gateway 192.168.1.1 my-custom-network
限制容器间通信(创建一个内部网络,该网络中的容器无法访问外部互联网):docker network create --internal
docker network create --internal my-internal-network
创建临时内存网络(创建临时文件系统挂载在容器中,适用于需要高效存储短期数据的场景):docker network create --tmpfs
docker run --network=my-custom-network --tmpfs /app/tmp my-container
查看容器连接的网络:docker network inspect <container>
docker network inspect my-container
网络模式介绍
Bridge 网络模式(默认模式)
简介:bridge
是 Docker 的默认网络模式,主要用于单个 Docker 主机上的容器通信
每个容器都连接到一个虚拟桥接网络上(通常是 docker0
网络),并通过该网络与其他容器进行通信
场景:适用于在同一台宿主机上运行的多个容器之间通信
特点:容器之间的通信受到网络隔离;可以通过宿主机 IP 和端口映射访问容器内的服务;适合一般的开发和测试场景
示例:docker run --name mycontainer -d nginx
优点:容器间有网络隔离,安全性高;配置简单,适合大多数单机容器通信需求
缺点:网络性能较低,增加了一个虚拟化层;如果需要容器与宿主机直接通信,需要使用端口映射
Host 网络模式
简介:在 host
模式下,容器与宿主机共享网络栈,容器不再拥有独立的网络命名空间,容器直接使用宿主机的 IP 地址和端口
场景:适用于需要极低网络延迟、无网络隔离的场景,通常用于性能要求较高的应用
容器和宿主机共享同一个网络命名空间,容器不会有独立的 IP 地址,容器的服务与宿主机的服务共享相同的 IP 和端口范围
特点:容器中的端口直接映射到宿主机的端口上,无需额外的端口映射配置;容器和宿主机的网络是共享的,因此所有网络接口和端口都直接暴露
docker run --network host -d nginx
优点:性能最佳,没有虚拟化网络层,延迟低,适合需要高性能的应用;容器可以轻松访问宿主机的所有网络资源
缺点:安全性差:由于容器和宿主机共享网络命名空间,没有网络隔离,可能会暴露不必要的网络服务;容器端口可能与宿主机上的其他服务发生冲突,尤其是在同一个端口上运行多个容器时
Overlay 网络模式
简介:overlay
网络模式用于在多台 Docker 主机上运行的容器之间创建一个分布式网络,适用于 Docker Swarm 或 Kubernetes 等集群环境。它允许跨主机的容器互相通信
场景:适用于需要跨多个 Docker 主机的分布式应用,例如 Swarm 集群或 Kubernetes 集群中的服务
每个容器分配一个虚拟 IP 地址,该 IP 地址可以在集群中其他主机上直接通信
容器通过 VXLAN 隧道技术进行通信,确保多主机之间的网络隔离
特点:容器之间可以跨主机通信,就像它们在同一台主机上一样;Docker 自动管理 VXLAN 隧道,不需要手动配置网络路由
docker network create -d overlay my-overlay-network
优点:容器可以在不同主机之间无缝通信,适合大规模分布式应用;提供网络隔离,可以确保各个应用的安全
缺点:性能较差,由于跨主机的通信需要使用隧道技术,网络延迟和性能会比单主机通信低;需要 Docker Swarm 或其他编排工具支持
Macvlan 网络模式
简介:macvlan
模式允许将容器直接暴露在物理网络上,并为每个容器分配一个独立的 MAC 地址,容器看起来像是直接连接到物理网络中的独立设备
场景:适用于需要让容器完全融入物理网络的场景,如容器需要直接使用物理网络的 DHCP 服务、或需要与物理网络中的其他设备进行通信
容器通过 macvlan
网络拥有独立的 MAC 地址和 IP 地址
容器可以与物理网络中的其他设备(如交换机、路由器)直接通信
特点:容器与物理网络完全融为一体,可以像普通物理主机一样与其他设备通信;容器可以通过物理网络访问外部资源,无需通过 NAT
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 my-macvlan-network
优点:容器可以像物理机一样直接连接到网络,拥有独立的 MAC 地址和 IP 地址;容器与宿主机的网络完全隔离,容器不会影响宿主机网络
缺点:容器和宿主机之间通信困难,通常需要额外的路由配置;需要物理网络支持,配置复杂性较高