Docker 在安装的时候会在主机创建三个网络,使用以下命令查看
sh
docker network ls默认情况下有bridge、host、none这三种网络类型
- none:相当于内部容器进行断网,这让容器是无法连接到互联网的
- bridge(默认):容器默认使用类型,这是桥接网络
- host:当容器使用host网络时,会共享宿主主机的网络,并且跟宿主主机的网络配置一样(使用这种模式也就不需要做什么端口映射等操作)
创建容器的时候使用 network 进行指定使用的网络
sh
docker run --network=[网络名] [镜像]自定义网络
Docker 默认提供三种网络驱动:bridge、overlay、macvlan,不同的驱动对应着不同的网络设备驱动,实现的功能也不一样
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进行连接到指定的网络shdocker network connect [网络名] [容器名称/容器ID]
容器通信
可以直接通过容器的IP地址在容器间进行通信,只要保证两个容器处于同一个网络下即可
缺点:在大部分情况下,容器部署之后的IP地址是自动分配的(也可以使用--ip来手动指定)
DNS服务器
Docker 提供了类似于DNS服务器的套路,域名解析IP,这里的域名就是指容器的名称
sh
docker run -it --name=[容器名称] ubuntu
使用这种方式只有在自定义网络的情况下才能使用
还有一种方式是让两个容器共享同一个网络,两个容器共享同一个IP地址,这样也可以达到通信的结果
sh
docker run -it --name=netTest-2 --network=container:[共享的容器] ubuntu-net