You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.1 KiB

docker

Docker四种网络模式?

Docker网络模式 配置 说明
host模式 net=host 容器和宿主机共享Network namespace。该模式下容器是不会拥有自己的ip地址而是使用宿主机的ip地址和端口。这种模式的好处就是网络性能比桥接模式的好缺点就是会占用宿主机的端口,网络的隔离性不太好
container模式 net=container:NAME_or_ID 容器和另外一个容器共享Network namespace。kubernetes中的pod就是多个容器共享一个Network namespace。
none模式 net=none 容器有独立的Network namespace但并没有对其进行任何网络设置如分配veth pair 和网桥连接配置IP等。没有IP地址无法连接外网一般用于测试
bridge模式 net=bridge (默认为该模式)

Docker的bridge网络是如何工作的以及如何进行内外网络通信的

Docker容器创建时候默认会连接到docker0这个虚拟网桥(172.17.0.1)并从docker0子网中分配一个IP给容器使用并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备Docker将veth pair设备的一端放在新创建的容器中并命名为eth0容器的网卡另一端放在主机中以vethxxx这样类似的名字命名并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。

如何与外部通信?

  1. busybox 发送 ping 包172.17.0.2 > www.baidu.com。

    docker0 收到包,发现是发送到外网的,交给 NAT 处理。

  2. NAT 将源地址换成 enp0s3 的 IP10.0.2.15 > www.bing.com。

  3. ping 包从 enp0s3 发送出去,到达 www.bing.com。

外部世界如何访问容器?

一句话就是端口映射

  1. docker-proxy 监听 host 的 32773 端口。

  2. 当 curl 访问 10.0.2.15:32773 时docker-proxy转发给容器 172.17.0.2:80。

  3. httpd 容器响应请求并返回结果。