测试docker容器内部网络能否ping通。
docker run -d -P --name tomcat01 tomcat #下载tomcat测试
docker exec -it tomcat01 ip addr #运行并查看网络
ping 172.17.0.2 #测试ping通
原理
1.我们每启动一个docker容器,docker容器都会分配一个ip,我们只要安装了docker,就会有一个网卡docker0桥接模式,使用的技术是evth-pair技术!所有的容器在不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用IP。
--link
docker exec it tomcat01 ping tomcat02 #此方法ping不通。
docker run -d -P --name tomcat03 --link tomcat02 tomcat #此方法让tomcat03和tomcat02联通。
docker exec it tomcat03 ping tomcat02 #此方法ping现在可以通了。2ping3是不通的,每配置不能反向连接
自定义网络
好处:docker会帮我们维护好对应关系,因为容器启动ip会变化,现在可以不用ip来ping,直接通容器名称就可以ping。
redis好的:不同的集群使用不同的网络,保证集群是安全和健康的,mysql 也是如此。
网络模式
bridge: 桥接docker默认
none: 不配置网络
host: 和宿主机共享网络
container:容器网络联通(用的少,局限很大)
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat
#docker0特点:默认,域名不能访问 --link可以访问
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
#subnet子网最多支持65535,gateway默认路由 ,mynet名称
docker run -d -P --name tomcat01-net01 --net mynet tomcat
docker run -d -P --name tomcat01-net02 --net mynet tomcat
docker exec it tomcat01-net01 ping tomcat01-net02
网络联通:
tomcat01使用的是docker默认网络,mynet是自定义网络,此时两个网络是不能互通的,包括网络内的容器都不能互通,我们可以用打通的方式让两个网络内的容器互通。
docker network connect mynet tomcat01 #mynet和tomcat01容器联通
docker network disconnect mynet tomcat1 #删除mynet网络