36

Docker网络

了解Dcoker0

启动两个容器

docker run -d -P --name tomcat1 tomcat
docker run -d -P --name tomcat2 tomcat

查看tomcat1和tomcat2容器的ip地址

image-20210110001027068

查看本地网卡,会多出两个容器的网卡并且是成双成对的出现

image-20210110000711696

而此技术为evth-pair虚拟网络,下图是docker容器之间的网络通讯图,docker在创建容器时会使用evth-pair虚拟出网络接口绑定在容器和docker0上,而所有的docker容器网络之间的访问通过docker0作为路由器进行通讯。

image-20210109234314754

结论:tomcat1和tomcat2 是共用一个路由器 docker0

所有的容器不指定网络的情况下,都是docker0路由,docker会给我们的容器分配一个默认可以的IP

而Docker使用的是Linux的桥接,宿主机中Dokcer容器的网桥是Docker0。

Docker中所有的网络接口使用的都是虚拟的,虚拟转发效率高。

image-20210109235452716

常规容器场景中,容器之间互通使用的是IP地址。

使用tomcat01 ping tomcat02 IP地址可通

image-20210110003041402

但使用tomcat01 ping tomcat02容器名则不通

image-20210110003210850

容器IP在某些场景会更换,如何在更换IP后,项目不重启的情况下使用容器名(服务)来访问容器?

此处可使用--link绑定容器名进行访问

启动新容器并绑定tomcat01
docker run -d -P --name tomcat03 --link tomcat01 tomcat

使用tomcat03 ping tomcat01 可通

image-20210110003535649

但反向ping tomcat01 ping tomcat03 不通

image-20210110003615993

而此原因是当使用--link时,是将tomcat01和IP写入到了tomcat03的hosts文件中,并进行绑定,当我们ping tomcat01时就是在ping tomcat01的IP地址,而tomcat01的hosts配置文件中未写入tomcat03 配置文件,所以ping不通。

image-20210110003932893

结论:--link操作其实就是写入hosts配置文件进行IP绑定。若想tomcat01ping通tomcat03,重新生成容器绑定即可,但此方法效率较低,不推荐使用。

查看docker所有网卡信息
docker netwrok

移除docker网络
docker network rm id

容器互联–自定义网络

网络模式

bridge			桥接模式(docker默认使用此模式,自定义网络也推荐使用此模式)
none 不配置网络
host 宿主机共享网络
container 容器网络互通(使用较少,局限性大)




docker0特点: 容器不指定自定义网络,则默认使用。域名不能访问,虽可使用--link,但效率不高

查看docker网卡信息

docker network
connect Connect a container to a network
create Create a network
disconnect Disconnect a container from a network
inspect Display detailed information on one or more networks
ls List networks
prune Remove all unused networks
rm Remove one or more networks

docker network ls

image-20210110010228773

[root@VM_0_8_centos ~]# docker network create --help

Usage: docker network create [OPTIONS] NETWORK

Create a network

Options:
--attachable Enable manual container attachment
--aux-address map Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])
--config-from string The network from which to copy the configuration
--config-only Create a configuration only network
-d, --driver string Driver to manage the Network (default "bridge")
--gateway strings IPv4 or IPv6 Gateway for the master subnet
--ingress Create swarm routing-mesh network
--internal Restrict external access to the network
--ip-range strings Allocate container ip from a sub-range
--ipam-driver string IP Address Management Driver (default "default")
--ipam-opt map Set IPAM driver specific options (default map[])
--ipv6 Enable IPv6 networking
--label list Set metadata on a network
-o, --opt map Set driver specific options (default map[])
--scope string Control the network's scope
--subnet strings Subnet in CIDR format that represents a network segment

创建自定义网络

docker network create --driver bridge(桥接) mynet(网卡名称[自己定义])  --subnet 192.168.0.0/16(子网掩码) --gateway 192.168.0.1(网关)

创建成功

image-20210110011004871

docker network inspect mynet  查看自定义网络详细信息

image-20210110011102636

启动两个容器使用自定义网络,测试是否可使用域名互通

启动  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

可通

image-20210110011630895

再次查看mynet 网卡详细信息

docker network inspect mynet

image-20210110011801205

好处:不同集群使用不同网络,网络之间互相隔离,互不相干!

网络连通

容器跨网段访问,不是将两个网络打通,而是一个容器去访问另外一个网络。(一台服务器双网卡模式)

例:docker0网卡下的tomcat01 互通 mynet网卡下所有容器(tomcat-net-01[02])

常规模式下无法访问

image-20210110013250601

我们使用docker network connect docker network connect 网卡名 容器名 命令可将tomcat01 添加到mynet网卡中,实现互通

docker network connect mynet tomcat01

image-20210110013744291

image-20210110013818281

互通测试ok

image-20210110013957776