Skip to content

Docker 在安装的时候会在主机创建三个网络,使用以下命令查看

sh
docker network ls

默认情况下有bridgehostnone这三种网络类型

  • none:相当于内部容器进行断网,这让容器是无法连接到互联网的
  • bridge(默认):容器默认使用类型,这是桥接网络
  • host:当容器使用host网络时,会共享宿主主机的网络,并且跟宿主主机的网络配置一样(使用这种模式也就不需要做什么端口映射等操作)

创建容器的时候使用 network 进行指定使用的网络

sh
docker run --network=[网络名] [镜像]

自定义网络

Docker 默认提供三种网络驱动:bridgeoverlaymacvlan,不同的驱动对应着不同的网络设备驱动,实现的功能也不一样

  • bridge: 是默认单机网络驱动,它在宿主机内部创建一个虚拟网桥,使同一台主机上的容器能够相互通信,并通过 NAT 访问外网,适用于多数单机应用场景
  • overlay:是专为跨主机通信设计,通过 VXLAN 隧道技术在多个 Docker 宿主机之间创建一个虚拟网络,让分布在不同物理机上的容器感觉像是在同一个局域网中,它是 Docker Swarm 集群的默认网络方案,适合分布式微服务架构
  • macvlan:是一种更为特殊的驱动,它为每个容器分配独立的 MAC 地址,使容器直接“插”在物理网络上,如同一台真实的物理设备,从而获得最高的网络性能和最低的延迟,适用于遗留应用迁移、对网络性能要求极高的场景。同时需要注意的是,它直接依赖物理网络且可能受交换机 MAC 地址表容量限制
sh
# 创建一个bridge网络
docker network create --driver bridge [网络名]

使用network inspect命令来查看网络配置信息

sh
docker network inspect [网络名]

不同的网络是相互隔离的,无法进行通信

可以在创建的时候就指定相同的自定义网络,如果容器已经创建完成可以使用 network connect 进行连接到指定的网络

sh
docker network connect [网络名] [容器名称/容器ID]

容器通信

可以直接通过容器的IP地址在容器间进行通信,只要保证两个容器处于同一个网络下即可

缺点:在大部分情况下,容器部署之后的IP地址是自动分配的(也可以使用--ip来手动指定)

DNS服务器

Docker 提供了类似于DNS服务器的套路,域名解析IP,这里的域名就是指容器的名称

sh
docker run -it --name=[容器名称] ubuntu

image-20240527183352179

使用这种方式只有在自定义网络的情况下才能使用

还有一种方式是让两个容器共享同一个网络,两个容器共享同一个IP地址,这样也可以达到通信的结果

sh
docker run -it --name=netTest-2 --network=container:[共享的容器] ubuntu-net