docker进阶学习(一)
Docker网络
了解Dcoker0
启动两个容器
docker run -d -P --name tomcat1 tomcat |
查看tomcat1和tomcat2容器的ip地址
查看本地网卡,会多出两个容器的网卡并且是成双成对的出现
而此技术为evth-pair虚拟网络,下图是docker容器之间的网络通讯图,docker在创建容器时会使用evth-pair虚拟出网络接口绑定在容器和docker0上,而所有的docker容器网络之间的访问通过docker0作为路由器进行通讯。
结论:tomcat1和tomcat2 是共用一个路由器 docker0
所有的容器不指定网络的情况下,都是docker0路由,docker会给我们的容器分配一个默认可以的IP
而Docker使用的是Linux的桥接,宿主机中Dokcer容器的网桥是Docker0。
Docker中所有的网络接口使用的都是虚拟的,虚拟转发效率高。
容器互联–link
常规容器场景中,容器之间互通使用的是IP地址。
使用tomcat01 ping tomcat02 IP地址可通
但使用tomcat01 ping tomcat02容器名则不通
容器IP在某些场景会更换,如何在更换IP后,项目不重启的情况下使用容器名(服务)来访问容器?
此处可使用--link
绑定容器名进行访问
启动新容器并绑定tomcat01 |
使用tomcat03 ping tomcat01 可通
但反向ping tomcat01 ping tomcat03 不通
而此原因是当使用--link
时,是将tomcat01和IP写入到了tomcat03的hosts文件中,并进行绑定,当我们ping
tomcat01时就是在ping
tomcat01的IP地址,而tomcat01的hosts配置文件中未写入tomcat03 配置文件,所以ping
不通。
结论:--link
操作其实就是写入hosts配置文件进行IP绑定。若想tomcat01ping
通tomcat03,重新生成容器绑定即可,但此方法效率较低,不推荐使用。
查看docker所有网卡信息 |
容器互联–自定义网络
网络模式
bridge 桥接模式(docker默认使用此模式,自定义网络也推荐使用此模式) |
查看docker网卡信息
docker network |
docker network ls |
[root@VM_0_8_centos ~]# docker network create --help |
创建自定义网络
docker network create --driver bridge(桥接) mynet(网卡名称[自己定义]) --subnet 192.168.0.0/16(子网掩码) --gateway 192.168.0.1(网关) |
创建成功
docker network inspect mynet 查看自定义网络详细信息 |
启动两个容器使用自定义网络,测试是否可使用域名互通
启动 docker run -d -P --name tpomcat-net-01 --net mynet tomcat docker run -d -P --name tpomcat-net-02 --net mynet tomcat 互ping docker exec -it tpomcat-net-01 ping tpomcat-net-02 docker exec -it tpomcat-net-02 ping tpomcat-net-01 |
可通
再次查看mynet 网卡详细信息
docker network inspect mynet |
好处:不同集群使用不同网络,网络之间互相隔离,互不相干!
网络连通
容器跨网段访问,不是将两个网络打通,而是一个容器去访问另外一个网络。(一台服务器双网卡模式)
例:docker0网卡下的tomcat01 互通 mynet网卡下所有容器(tomcat-net-01[02])
常规模式下无法访问
我们使用docker network connect docker network connect 网卡名 容器名
命令可将tomcat01 添加到mynet网卡中,实现互通
docker network connect mynet tomcat01 |
互通测试ok