1.NAT
NAT模型是docker默认的网络模型,也就是bridge模型,然后通过宿主机上面docker0这个网络设备NAT出来我们的网络。
我们可以看下我宿主机上面是192开头的网络,然后docker0这个网络设备是172开头的,我们的容器也是172开头的,我们可以运行一个docker容器,进入里面看下。
docker run -it --rm alpine /bin/sh
我们可以看到容器内部跟docker0这个网络设备是在一个网段上的。这个docker0网段是可以通过修改/etc/docker/daemon.json 这个文件修改的,添加内容 “bip”: “ip/netmask” 就可以,但是不能与宿主机一个网段。
2. None
None这个网络模型表示docker容器不使用网络,在启动容器的时候可以通过–net=none来指定。
docker run -it --rm --net=none alpine /bin/sh
我们就可以看到容器内只有回环网卡了。
3.Host
Host模式网络表示docker与宿主机使用同一个网络,使用的是宿主机的网络,我们可以在启动容器的时候使用–net=host指定使用host网络模式。
docker run -it --rm --net=host alpine /bin/sh
4.联合网络
联合网络就是我两个容器共享一个网络,比如我一个容器用另一个容器的网络,启动容器的时候可以使用–net=container:容器id 来与你这个容器id共用一个网络。
这里我们演示下:先run一个Nginx容器,然后再run
- 启动Nginx容器
docker run -d --rm --name Nginx_net 2622e6cca7eb
进入容器中安装net-tools并查看容器的ip
docker exec -it 433c1887d69d /bin/bash
2.运行另一个容器使用上面我们起的Nginx容器网络:
docker run -ti --rm --net=container:433c1887d69d debian /bin/bash
在容器内安装下net-tools,使用ifconfig查看,ip是与上面容器ip是一样的:
然后我们在安装个curl工具,请求一下localhost:
我们可以看到,我们正好获取到上面Nginx容器的index.html页面了,也就说明他俩容器共享一个网络。