为什么提供网络功能?
docker允许通过外部访问容器或者容器互联的方式来提供网络服务。
本文主要讲的是docker中容器间的网络网桥bridge的双向通信。单向通信 --link的使用的很少了。如下图:
过程原理:
当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服务都挂载到同一个网桥上,组成一个虚拟共享网络。
2、docker容器间网络互联通信、以及相关命令①查看网桥配置信息
docker network ls②创建网桥
docker network create emp③挂载网桥
docker run -d -p 8089:8080 --name mysql --network 网桥名 镜像运行容器的时候直接使用 --network 网桥名 将容器挂载到网桥上,现在挂载了2个容器:
查看刚刚运行的容器,
使用curl http://容器名:端口进行访问:
比如:首先得进入一个容器,curl http://ptomcat2:8080访问另一个容器
注意:容器名是和容器的ip地址进行映射的;端口是容器内部的端口,不是宿主机的端口。
④显示网桥具体信息
docker inspect 网桥名⑤删除网桥
docker network rm 网桥
OK,这样使用网桥bridge就实现了容器之间进行双向互联互通。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)