2021-05-08 22:01:06
Docker 提供 Bridge、Host、None、Container、Overlay 五种网络模式,可根据容器通信需求选择配置。具体如下:
Bridge 模式
原理:Docker 默认网络模式,在宿主机上创建虚拟网桥(如 docker0),容器通过虚拟网卡(如 eth0)连接到该网桥,形成隔离的网络空间。
特点:
容器拥有独立的 IP 地址,可与其他容器或外部网络通信(需端口映射)。
容器间通过虚拟网桥直接通信,无需额外配置。
容器无法直接访问宿主机网络,需通过宿主机 IP 和映射端口通信。
适用场景:需要容器间独立通信,且与外部网络隔离的场景(如微服务部署)。
配置方法:
创建容器时默认使用:docker run -d --name container_name image_name。
手动指定:docker run -d --network=bridge --name container_name image_name。
Host 模式
原理:容器直接共享宿主机的网络堆栈(如网络命名空间、IP 地址、端口等),跳过虚拟网络层。
特点:
容器与宿主机使用相同 IP 地址,端口直接绑定到宿主机。
容器可访问宿主机所有网络资源(如本地服务、外部连接)。
牺牲隔离性换取性能,适合高吞吐场景。
适用场景:需要容器与宿主机共享网络的高性能应用(如监控工具、网络代理)。
配置方法:docker run -d --network=host --name container_name image_name。
None 模式
原理:容器不配置任何网络接口,仅拥有本地回环地址(127.0.0.1)。
特点:
容器无外部网络访问能力,也无法被外部访问。
适用于仅需本地进程通信或完全隔离的场景。
适用场景:需要隐藏容器或限制网络访问的敏感任务(如加密处理、离线计算)。
配置方法:docker run -d --network=none --name container_name image_name。
Container 模式
原理:新容器加入已存在容器的网络命名空间,共享其 IP 地址和端口。
特点:
两个容器网络完全共享,可互相访问且端口不冲突。
主容器停止时,子容器网络随之失效。
适用场景:需要紧密耦合的容器共享网络资源(如 Sidecar 模式中的日志收集器)。
配置方法:
启动主容器:docker run -d --name main_container image_name。
启动子容器并共享网络:docker run -d --network=container:main_container --name sub_container image_name。
Overlay 模式
原理:通过虚拟网络(如 Docker Swarm 或 Kubernetes 的 CNI 插件)连接跨主机的容器,形成分布式网络。
特点:
容器可跨主机通信,IP 地址由 Overlay 网络统一分配。
支持高可用性和负载均衡,适合集群部署。
适用场景:多主机环境下的容器编排(如 Swarm 集群、Kubernetes Pod 通信)。
配置方法:
初始化 Swarm 集群:docker swarm init。
创建 Overlay 网络:docker network create --driver=overlay overlay_network_name。
启动容器并加入网络:docker run -d --network=overlay_network_name --name container_name image_name。
选择建议: