网络模式

Link

默认创建的容器使用的是默认的bridge这个network,容器之间使用ip地址是可以ping通的,如果想使用容器名ping通,则需要在创建容器时使用 --link 参数(增加DNS转换),如果使用自己创建的bridge模式的network,容器之间是相互link好的

Docker Networking
  • Docker Networking 允许用户创建自己的网络,容器可以通过这个网络互相通信
  • 实质上,Docker Networking 以新的用户管理的网络补充了现有的 docker0(也就是上面说的link,存在的问题:要在应用程序里对Redis容器的IP地址做硬编码,如果重启容器,Docker会改变容器的IP地址,而Docker Networking会自动维护容器名与ip之间的关系)
  • Docker Networking 也和 Docker Compose 以及 Swarm 进行了集成
# 默认有三个
docker network ls
# 创建一个新的网络
docker network create -d bridge my_network  # 这个新网络是一个本地的桥接网络(着非常像 docker0 网络)
# 查看网络细节
docker network inspect my_network   # docker run -d --net=my_network --name flask Flask
# 删除
docker network rm my_network
# 将已有容器连接到指定网络或断开
docker network connect/disconnect my_network redis2 # 一个容器可以同时隶属于多个Docker网络
Bridge模式

当 Docker 进程启动时,会在主机上创建⼀个名为 docker0 的虚拟⽹桥,此主机上启动的 Docker 容器会连接到这个虚拟⽹桥上。虚拟⽹桥的⼯作⽅式和物理交换机类似,这样主机上的所有容器就通过交换机连在了⼀个⼆层⽹络中。从 docker0 ⼦⽹中分配⼀个 IP 给容器使⽤,并设置 docker0 的 IP 地址为容器的默认⽹关。在主机上创建⼀对虚拟⽹卡 veth pair 设备,Docker 将 veth pair 设备的⼀端放在新创建的容器中,并命名为 eth0 (容器的⽹卡),另⼀端放在主机中,以 vethxxx 这样类似的名字命名,并将这个⽹络设备加⼊到 docker0 ⽹桥中。可以通过 brctl show 命令查看

bridge 模式是 docker 的默认⽹络模式,不写 –net 参数,就是 bridge 模式。使⽤ docker run -p 时,docker 实际是在 iptables 做了 NAT 规则,实现端⼝转发功能。可以使⽤ iptables -t nat -vnL 查看。 bridge 模式如下图所示:

dockers swarm网络原理_dockers swarm网络原理