理解Docker0网络
一、通过命令获取本机的ip信息
ip addr
原始状态就是3个网络
二、docker如何处理容器的网络访问的?
比如我们常见的如何实现kibana和ES的内部连接?
每次启动一个docker容器,docker就会给容器分配一个ip,ip都是成对出现分,这里使用的是evth-pair技术。我们只要是安装了docker,系统就会自带一个docker0,它的作用类似于路由器,使用桥接模式,连接容器和docker0
下图中的tomcat01和tomcat02是公用的一个路由docker0,所有的容器如果不指定网络,都是通过docker0来路由的。docker会给容器分配一个默认的可用的ip
三、总结
docker网络通信
容器互联--link
有一种场景是两个容器,我想要实现容器之间的通信,那么这时候简单的开启开两个容器是无法实现互相ping通的,所以这个时候就需要用到容器互联命令
一、命令
启动容器的时候,增加互联的命令,将来想要实现容器之间的联通问题,不需要再写ip,直接写服务名就行了
docker run -d -P --name tomcat03 --link tomcat02 tomcat #--link 想要连接的容器
注意:这样的方式,仅仅支持3连2,反向的2连3是不支持的
二、--link命令的底层原理
比如我们在tomcat03容器中配置了tomcat02,底层是在tomcat03的/etc/host文件中将tomcat02的ip写死了,将来直接可以通过Ping tomcat02就可以实现联通
三、补充说明
docker0和这种--link只了解即可,现在不推荐使用,现在都是自定义网络
自定义网络
一、查看所有的docker网络
docker network ls
网络模式详情:
二、移除网络
docker network rm 网络名称
三、当我们启动容器的时候,其实是默认的使用了docker0模式
docker run -d -P --name tomcat01 --net bridge(默认自带--net bridge) tomcat
四、自定义网络
[root@test /]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
#--driver bridge 配置网络模式
#--subnet 192.168.0.0/16 配置子网
#--gateway 192.168.0.1 配置网关,可以理解成路由器的地址
6f9ca43bff05db80c4de4ac6f84a2d49a272ab33c8240df938da755df0d647a3
[root@test /]# docker network ls
NETWORK ID NAME DRIVER SCOPE
5d1b1c84aeb6 bridge bridge local
ef40e13a9d6b host host local
6f9ca43bff05 mynet bridge local
fb5b58abbc43 none null local
五、查看自己配置的网络信息
六、在自己创建的网络下面开启容器
这里区别前面的--net bridge,现在直接使用--net mynet即可
[root@test /]# docker run -d -P --name tomcat-net-01 --net mynet tomcat
5903ae19b321520fe5b298d45585f977dcf1e4bca0067d5d8944fa72ca371d6b
[root@test /]# docker run -d -P --name tomcat-net-02 --net mynet tomcat
07fecd3adfa7e04270c7c2295294af607a8631869584666a85c6f9491b03fc26
七、我们启动的两个容器,由于他们是在一个网络下,容器之间可以通过容器名进行联通(可以实现ping通)
八、自定义网络的好处
比如我们想搭建一个Redis或者MySQL集群,不同的集群使用不同的网络,保证集群是安全和健康的
网络联通
想要实现从Dockers0网络连接mynet网络,实现tomcat-01成功连接tomcat-net-01(所谓的一个容器,两个ip!),方法如下
1、使用命令
这里打通网络和容器之间的连接,需要用到connect命令
docker network connect mynet tomcat-01 #将tomcat-01连接到mynet网络上
2、查看mynet网络的元数据,发现联通后底层就是将tomcat-01,连接到了mynet网络上
docker network inspect mynet
3、测试能否实现tomcat-01ping通tomcat-net-01容器
4、总结
如果有人想实现跨网络操作其他的东西,可以通过使用docker network connect 来进行连通!
至此,你已经掌握了关于Docker网络的技术点,后续还会持续更新,敬请期待~