现在来聊聊Docker网络的桥接模式.

  • bridge模式原理

Docker的默认网络配置下用的是bridge模式,此模式会给每个新创建的容器分配独立的Namespace,IP段等,同时文件系统/进程等也是隔离的. 另外它会将对应容器的网络接到某个指定的虚拟网桥(比如启动Docker服务时默认创建的docker0)上.

  • bridge模式的特点

1)处于该模式的容器和宿主机网络不在同一个网段,容器一般使用172.16.0.xx/24这种网段. 所以容器不能直接和宿主机以外的网络进行通讯, 而必须要经过NAT的转换.
2)处于该模式的容器需要在宿主机上竞争端口,完成端口映射的配置后, 从外部到容器内的网络访问tcp流量将会通过DNAT从宿主机端口转发到容器内对应的端口上.
3)容器对于宿主机以外是不可见的,从容器发出的网络请求会通过SNAT从已对接的虚拟网桥(如宿主机的docker0)上统一发出网络请求.对于外部环境来说,就像是宿主机一个普通的进程发出的信息.
4)连接在同一个虚拟网桥上的容器默认可以相互通讯.
5)默认情况下是不能指定某个容器的ip的(随机分配),不过可以通过创建subnet来实现这个需求.

  • 操作示例

    • 创建简单的桥接网络
docker network create --driver bridge <your_network_name>
  • 创建一个指定了subnet的桥接网络
docker network create --driver bridge --subnet 172.19.0.0/16 <your_network_name>
  • 创建一个网络模式为bridge的容器
docker run -itd --name test1 --network <your_network_name> <your_docker_image> /bin/bash
  • 为容器指定ip
docker run -itd --name test1 --network <your_network_name> --ip 172.19.0.10 <your_docker_image> /bin/bash
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐