这一章我来总结docker网络,docker网络实质上是由 Docker 为应用程序所创造的虚拟环境的一部分,它能让应用从宿主机操作系统的网络环境中独立出来,形成容器自有的网络设备、IP 协议栈、端口套接字、IP 路由表、防火墙等与网络相关的模块。
-安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host
-
host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口(
和宿主机共享网络
)。 -
Container:创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围(
局限很大·,不常用
)。 -
None:该模式关闭了容器的网络功能(
不配置网络
)。 -
Bridge:此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信(
默认
)。
以上都是不用动手的,真正需要配置的是自定义网络。
docker0
但是这样也会有一个问题,如果这个容器挂掉了是不就意味着ip消失了,那这就对我们上线的服务很不利,我们上线的服务就很不健康,那是否可以让ping ip改为ping 域名呢,这样只要ping 域名了他就会自动去找该域名底下的ip这样就算这个域名服务中有个ip挂了那么依然会有另一个ip可以完成业务。
–link
这样容器就能直接ping需要联通的容器名,也就是说可以直接通过容器的名称进行通讯(通过域名访问),但是这样做很麻烦,所以不推荐使用这个方法。这里推荐自定义网络
自定义网络
可以看到创建成功了,我们去network inspect 看看我们自己创建的网络信息。
这就是我们配置的网络初始信息。
我们再network inspect 看看自定义的网络里的信息
可以看到已经自动分配了IP地址。
自定义的网络是具备通过名称进行联通的修复了不能通过名称进行联通的缺点。所以这时这两个容器之间是可以通过容器名进行ping通的。这里由于我下载的tomcat是阉割般的没有ping命令这里就不演示了。
看完上面的图应该很容易就知道咋写了吧。
可以看到两个不同网络之间的容器也能通过名称ping通了。再去docker network inspect net01
看看里面有啥变化
可以看到,这个docker0网络里的容器也被配置到了net01里并且自定义网络可以通过名称互通所有成功通信。