【详解】docker容器间的通信互联、以及相关命令

1.docker中容器间的高级网络配置

        为什么提供网络功能?

        docker允许通过外部访问容器或者容器互联的方式来提供网络服务。        

        本文主要讲的是docker中容器间的网络网桥bridge的双向通信。单向通信  --link的使用的很少了。如下图:

【详解】docker容器间的通信互联、以及相关命令_第1张图片

         过程原理:

        当docker启动的时,会自动在主机上创建一个docker0的虚拟网桥,实际上是Linux的虚拟网桥bridge,可以理解为一个软件的交换机。网桥会挂载到它得网口之间进行转发。

        同时docker随机分配一个本地未占用的私有网段中的一个地址docker0接口,比如典型的172.17.42.1,掩码为255.255.0.0。此后启动容器内的网口也会自动分配一个同一网段的地址172.17.0.0的地址。

        当创建一个docker容器的时候,同时会创建veth pair一对接口(当数据包发送到一个接口的时候,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即eth0;另一端在本地并被挂载到docker网桥,名称以veth开头。通过这种方式,主机可以跟容器相互通信,容器之间也可以互相通信。这样docker就创建了在主机和所有网络之间一个虚拟共享网络。

        如下图,tomcat和redis服务以及宿主机之间通过网桥bridge相互通信。宿主机和tomcat、redis服务都挂载到同一个网桥上,组成一个虚拟共享网络。

【详解】docker容器间的通信互联、以及相关命令_第2张图片

 2、docker容器间网络互联通信、以及相关命令

①查看网桥配置信息

docker network ls 

【详解】docker容器间的通信互联、以及相关命令_第3张图片

 ②创建网桥

docker network create emp 

【详解】docker容器间的通信互联、以及相关命令_第4张图片

③挂载网桥

docker run -d -p 8089:8080 --name mysql --network 网桥名  镜像

 运行容器的时候直接使用 --network  网桥名  将容器挂载到网桥上,现在挂载了2个容器: 

 查看刚刚运行的容器,

使用curl  http://容器名:端口进行访问:

比如:首先得进入一个容器,curl  http://ptomcat2:8080访问另一个容器

注意:容器名是和容器的ip地址进行映射的;端口是容器内部的端口,不是宿主机的端口。

【详解】docker容器间的通信互联、以及相关命令_第5张图片

 ④显示网桥具体信息

docker  inspect 网桥名

【详解】docker容器间的通信互联、以及相关命令_第6张图片

 ⑤删除网桥

docker network rm 网桥

【详解】docker容器间的通信互联、以及相关命令_第7张图片

 OK,这样使用网桥bridge就实现了容器之间进行双向互联互通。

        

你可能感兴趣的:(【Docker】,docker,容器)