Docker 网络类型与容器通信

一、Docker 网络概述

Docker 在安装时会自动创建三种网络:

  • none:无网络
  • host:共享宿主机网络栈
  • bridge:默认网络类型,通过 docker0 网桥连接

查看网络列表:

docker network ls

二、Docker 网络类型

1、None 网络
  • 容器仅有一个 lo 回环接口,无外部网络连接
  • 适用于高安全性、无需网络访问的场景。
[root@docker ~]# docker pull busybox
[root@docker ~]# docker run --name wil1 -it --rm --network=none busybox:latest

在这里插入图片描述

2、Host 网络
  • 容器共享宿主机网络栈,性能最佳
  • 存在端口冲突风险
[root@docker ~]# docker run --name wil1 -it --rm --network=host busybox:latest

在这里插入图片描述

3、Bridge 网络(默认)
  • 容器通过 docker0 网桥连接
  • 每个容器分配一个虚拟网卡(veth pair),一端在容器内,一端在 docker0
[root@docker ~]# docker run --name wil1 -it --rm busybox:latest

在这里插入图片描述

[root@docker ~]# docker network inspect bridge

在这里插入图片描述

三、自定义 Bridge 网络

1、创建自定义网络
[root@docker ~]# docker network create --driver bridge --subnet 172.20.0.0/16 --gateway 172.20.0.1 wiltjer
[root@docker ~]# docker network ls

在这里插入图片描述

2、指定容器使用自定义网络和 IP
[root@docker ~]# docker run --name wil1 -it --rm --network=wiltjer busybox:latest

在这里插入图片描述

3、跨网络通信
  • 默认不同网络的容器无法通信
[root@docker ~]# docker run --name wil1 -it --network=wiltjer busybox:latest

在这里插入图片描述

  • 可通过 docker network connect 为容器添加多个网络
[root@docker ~]# docker network connect wiltjer wil2
[root@docker ~]# docker exec -it wil2 sh

在这里插入图片描述

四、容器间通信方式

1、基于 IP 地址
  • 在同一网络中的容器可直接通过 IP 访问
  • 案例如上
2、基于容器名(Docker DNS)
  • 使用 --name 命名容器
  • Docker 内嵌 DNS 服务自动解析容器名
  • 仅支持自定义 bridge 网络,默认 bridge 不支持
[root@docker ~]# docker run --name wil1 -it --network=wiltjer busybox:latest
[root@docker ~]# docker run --name wil2 -it --network=wiltjer busybox:latest

在这里插入图片描述

3、Joined 容器
  • 多个容器共享同一网络栈
  • 可通过 127.0.0.1 互相访问
[root@docker ~]# docker run --name wil3 -it --network=wiltjer busybox:latest
[root@docker ~]# docker run --name wil4 -it --network=container:wil3 busybox:latest

在这里插入图片描述

五、容器与外部网络通信

1、容器访问外部(NAT)
  • 容器通过 docker0 和宿主机 NAT 规则访问外网
2、外部访问容器
  • 使用 host 网络:容器直接使用宿主机网络
  • 端口映射:将容器端口映射到宿主机
[root@docker ~]# docker run --name tjer -itd -p 80:80 httpd:latest

在这里插入图片描述

六、总结

网络类型 特点 适用场景
None 无网络,只有 lo 高安全、无需网络
Host 共享宿主机网络栈,性能高 高性能、不介意端口冲突
Bridge(默认) 通过 docker0 网桥连接 大多数容器场景
自定义 Bridge 支持 DNS 解析、更灵活的网络管理 多容器协作、需名称解析
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐