理解Docker0
准备工作:清空所有的容器,清空所有的镜像
docker rm -f $(docker ps -aq) #清空所有容器
docker rmi if $(docker images -aq ) #清空全部镜像
查看本地ip
ip addr
这里我们分析可得,有三个网络:
lo 127.0.0.1 #本地回环测试地址
etho 192.168.200.130 #虚拟机IP地址
docker0 172.17.0.1 #docker网桥
问题:docker是如何处理容器网络访问的?
测试一:虚拟机能否ping通docker容器内部
1、添加一个tomcat容器 docker run -d -P --name tomcat01 tomcat
2、查看容器的内部网络地址(这里需要注意:最新的tomcat镜像没有ifconfig指令,需要安装net-tools)
docker exet -it tomcat01 /bin/bash #进入tomcat容器
apt-get update #更新软件
apt-get install net-tools #安装net-tools
ifconfig #查看IP地址
3、退出tomcat容器,重新查看IP
发现多了一个vetha2b6bfa@if8的IP地址
4、虚拟机可以ping通tomcat容器
原理
我们每启动一个docker容器,docker就会给docker容器分配一个IP,我们只要安装了docker,就会有一个网卡docker0桥接模式,使用的是evth-pair技术!
evth-pair就是一对虚拟设备接口,他们是成对出现的,一端连着的协议,一端彼此相连。
正因为有这个特性,它常常充当着一个桥梁,连接着各种虚拟网络设备,典型的例子像“两个 namespace 之间的连接”,“Bridge、OVS 之间的连接”,“Docker 容器之间的连接” 等等,以此构建出非常复杂的虚拟网络结构,比如 OpenStack Neutron。