记录每一天,过好每一天

只不过是不喜欢失望罢了

Docker的网络模式

在安装docker后,docker有默认的4种网络模式:

  1. host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

  2. Container:创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。

  3. None:在这种模式下,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。

  4. Bridge:此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。

在运行容器时如果不指定网络(--net=模式指定)。那么容器会使用默认的网络模式也就是bridge。
当Docker服务启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

然后为容器分配IP,Docker会从RFC1918所定义的私有IP网段中,选择一个和宿主机不同的IP地址和子网分配给docker0,连接到docker0的容器就从这个子网中选择一个未占用的IP使用,所以这也是因为容器IP会在重启时改变。
Docker网络连接配置:

验证,使用命令ip a查看:

创建自定义网络

在docker创建网络命令docker network create [OPTIONS] NETWORK
所以我们使用 docker network create --subnet 172.18.0.0/16 --gateway 172.18.0.1 -d bridge mynetwork
创建完成后,查看一下:

这时候运行容器只需要加上docker run--name blog --network mynetwork --ip 172.18.0.12 ....
就可以将容器连接上mynetwork这个网络并且设置IP为172.18.0.12
这时候再使用docker network inspect mynetwork
就可以在Containers中看到自己连接上的容器了,如果需要连接上已经运行的容器就需要docker network connect mynetwork test1
断开连接:docker network disconnect mynetwork test1
这是再查看:

可以看到多了一个br开头的网桥,还有几个veth开头的接口。
再查看容器的网络信息:

可以看到eth0接口。
再使用brctl show查看:

可以看到mynetwork和容器veth网络端口的连接

总结

使用docker network create -d bridge mynetwork可以创建一个自定义网络,运行容器时使用--network mynetwork --ip 172.18.0.12命令将其连接上mynetwork网络并且分配IP 172.18.0.12,连接已运行的容器可以使用docker network connect命令。当两个容器连接同一个网络下,那么这两个容器就可以ping通,也就不需要--link命令了。

最后

如果你喜欢这篇文章或者有建议,请给我留言吧。