docker 的网络和虚拟机的网络类似





bridge
bridge 网络的模型
随便进入一个 bridge 网络的容器,通过 yum -y install net-tools 安装 ifconfig 指令并使用,可见 容器网络 eth0

退出容器,在主机上查看 ifconfig,可见 主机网络 ens33 、默认网桥 docker0 以及两个 主机上容器虚拟网络 veth

veth 网络有两个,因为现在有两个容器在运行

主机网络 ens33、网桥 docker0 、主机上容器虚拟网络 veth 和 容器网络 eth0 之间关系如下图

ip addr 指令各网络前的序号对照二者的对应关系host
host 网络的模型
容器不再通过 容器内的 eth0 (host 模式下就压根没有 eth0) 与主机上的 虚拟网络 veth 匹配而达成通信
host 模式下的容器会直接使用主机的 IP 和端口,假设:
主机 IP 是 192.168.3.11,容器的 Dockerfile 中 EXPOSE 8080
则容器直接通过 192.168.3.11:8080 访问,若主机 8080 端口占用,顺次 +1

需要注意:host 网络模式下 docker run 的 -p 参数是失效的,伴随如下提示,如下例
WARNING: Published ports are discarded when using host network mode

none
container
container 网络的模型

docker run 时通过下面参数指定
--network bridge 连接到网桥,默认使用 docker0
--network host
--network none
--network container:容器名或 ID
查看 docker 网络命令
docker network COMMAND

docker 容器连接到网络
docker network connect
创建 docker 网络
docker network ls
docker 容器断开网络连接
docker network disconnect
查看 docker 网络细节
显示网络的详细信息 (可以显示一个或多个)
docker network inspect
查看 docker 网络模式
docker network ls

docker 裁剪
删除所有不用的网络
docker network prune
不用的网络是指 一次也没有被链接 的网络
删除 docker 网络
docker network rm
解决问题
同 §1.2 用途
步骤
新建网络

通过新建的网络启动容器
docker run -d -p 8081:8080 --network net_tomcat_01 --name tom tomcat
docker run -d -p 8080:8080 --network net_tomcat_01 --name tom1 tomcat

tom ping tom1
docker exec -it tom /bin/bash
ping tom1

自定义 bridge 网络 与默认 bridge 的区别
各个网络(其实就是虚拟网卡)如下图所示

自定义的网络 net_tomcat_01 是一个 bridge 网络,使用的虚拟网卡是 br-57865823eeb8
但 docker 本身有一个默认的 bridge 网络,就叫 bridge,使用的虚拟网卡是 docker0
使两个容器都指定默认的 bridge 网络是否可以达成上例中的效果?
docker run -d -p 8080:8080 --network bridge --name tom1 tomcat
docker run -d -p 8081:8080 --network bridge --name tom2 tomcat


比较四个 tomcat 的网络,未找到明显区别
因此只能理解为 默认的 bridge 网络中没有 DNS