Docker0网络解析
Docker0
通过命令查看
lo下所表示的是本机回环地址
etho下是我阿里云上的网卡地址
docker0是docker下的地址,docker0本身相当于一个虚拟网卡,整个docker0类似于路由器
启动一个tomcat镜像
docker run -it -P --name tom1 tomcat:8
启动另一个tomcat镜像
在宿主机上用ip addr查看
docker中所有借口都是虚拟的
-
可以ping通容器内部
-
容器之间可以互通
容器删除,相应的Veth也会自动删除
–link-
-link可以让容器使用 ping 容器名称
docker run -d -P --name tomcat1 tomcat
docker run -d -P --name tomcat2 tomcat
docker run -d -P --name tomcat3 --link tomcat2 tomcat
docker exec -it tomcat3 ping tomcat2
但是会引起一些麻烦,3可以连2,但是2不饿能连3,就比较麻烦。
本质就是在3中的/etc/hosts添加的了2的地址和名称
docker0本身也不支持使用容器名称进行通信
三种网络模式
bridge:桥接模式
host:主机模式
none:无网络模式
查看网络模式: docker network ls
bridge
host
该模式下容器是不会拥有自己的ip地址,而是使用宿主机的ip地址和端口。这种模式的好处就是网络性能比桥接模式的好。缺点就是会占用宿主机的端口,网络的隔离性不太好
none模式
加上后面的参数就行了 --net=none
none模式没有IP地址,无法连接外网,等于就是断网的状态,作用就是用于测试,生产环境一般不会用到这种
自定义网络模式
–driver bridge 设置网络模式
–subnet 192.168.0.1/16 设置子网
–gateway 192.168.0.1 设置网关
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
自定义网络测试
首先启动两个Ubuntu容器再分别安装net-tools和ping命令
使用自定义的网络,不用–link也可以ping容器名称
root@iZ2zegtrmp24clddqup0eiZ:~# docker exec -it ubuntu1 ping ubuntu2
PING ubuntu2 (192.168.0.3): 56 data bytes
64 bytes from 192.168.0.3: icmp_seq=0 ttl=64 time=0.080 ms
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.093 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.103 ms
64 bytes from 192.168.0.3: icmp_seq=3 ttl=64 time=0.092 ms
64 bytes from 192.168.0.3: icmp_seq=4 ttl=64 time=0.120 ms
容器连接网络
docker network connect mynet tomcat1 // docker network connect 网络名称 容器名称
原理就是将容器加入到该网络上,一个容器有多个IP