没有安装docker时用ip addr 查看网络配置如下
1 代表本地回环地址127.0.0.1,它代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口
2 是阿里云分配的内网地址
安装了docker后的网络配置
这里多了一个3
3 docker0代表docker默认的的网络地址,安装docker后就会自动生成一个
启动一个容器后查看容器内的网络配置
1 一样有个自己的回环地址
2 90:eth0@if91这个就是容器跟外部和容器间相互连接的地址 (容器间的网络ip地址网段相同说明可以相互连接,就跟局域网一样)
容器外ping容器内地址可以ping成功
容器内ping 其他容器的地址也可以ping通
启动容器再次查看ip addr
多了一个95后面对应的是94,而查看运行的容器的ip地址是94后面是95
这种容器内外链接的用到了一种叫做桥接的方式,用到的是evth-pair技术,就是成对出现的虚拟机设备接口,一端连接协议一端相互连接
原理图
docker中的所有网络接口都是虚拟的(虚拟化传输效率非常高)
容器删除或停止对应的网络桥接就是删除
容器的链接地址因为每次启动或者重启生成的都不相同,当我们在微服务的时候配置了多个数据库的连接,如果重启了数据链接地址就会跟着改变这样我们每次修改重启
就会修改链接地址会非常麻烦,有什么办法可以解决呢?
1 用容器名字相互连接,因为容器名字不会改变
--link参数(--link 就是在host文件里面加了一行解析)
docker run -d -P --name tomcat03 --link tomcat02 这样03就可以成功链接02了,但02不能链接03要链接成功必须再用02 --link 03才行
这个就算tomcat03下的hosts文件内容
2 自定义网路
docker network create --driver bridge --subnet 192.168.0.0/16 --getway 192.169.0.1 mynet (--subnet:定义子网,getway:定义网关)
将服务放在自定义的网络里面
docker run -d -P --name tomcat01 --net mynettomcat
自己定义的网络是比较完整的是可以直接相互连接的
网络模式
1 bridge :桥接(默认的方式,自己创建也是桥接模式) docker run -d -P --name tomcat01 --net bridge tomcat (bridge 就是默认的可以不写)
2 none:不配置网络
3 host :和宿主机共享网络
4 container:容器网络连通
容器间不同网段连通
docker network connect mynet tomcat01
连通之后就是把Tomcat01放到mynet网络下(容器跟网络连通)