目录
Docker 网络
- 清空环境
docker rmi -f $(docker images -aq) docker rm -f $(docker ps -aq)
理解Docker0
扫描二维码关注公众号,回复: 11670271 查看本文章
Docker 网络的核心就是 【Docker0】
我们可以用 ip addr查看一下宿主机的 ip 信息
三个网络
- 问题:docker是如何处理容器网络访问的?
- 先运行一个 tomcat 镜像,再查看一下网
docker run -d -P --name tomcat01 tomcat
- 查看docker容器网卡
docker exec -it tomcat01 ip addr
- eth0@if81是 docker 分配的
- linux能ping通docker容器内部
原理
- 我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡 docker0桥接模式,使用的技术是evth-pair技术
再次测试ip addr,这是在启动了一个容器后测试,多了262
再启动一个容器进行测试,发现又多了一对网卡
- 查看新启动的容器网卡
- 我们发现这个容器带来网卡,都是一对对的
- evth-pair就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连
- 正因为有这个特性,evth-pair 充当一个桥梁,连接各种虚拟网络设备的
- OpenStac,Docker容器之间的连接,OVS的连接,都是使用evth-pair 技术
- 我们来测试下tomcat01和tomcat 02是否可以ping通?
- 容器和容器之间是可以ping通的
- 原理图
- 结论:tomcat01和tomcat02是公用的一个路由器,docker0。
- 所有的容器不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用IP
- Docker使用的是Linux的桥接,宿主机中是一个Dokcer容器的网桥docker0。
- Docker中的所有的网络接口都是虚拟的。虚拟的转发效率高。(比如内网传递文件)
- 只要容器删除,对应网桥一对就没了。
[--link]
- 思考一个场景,我们编写了一个微服务,database url=ip:,项目不重启,数据库ip换掉了,我们希望可以处理这个问题,可以名字来进行访问容器?
- 运行两个容器
- 直接通过容器名称ping不通
- 对两个容器使用--link,可以 ping 通,反向无法 ping 通
docker network命令(ls、inspect)
docker network -ls
docker network inspect 容器id
- docker启动时分配的id
- 其实这个tomcat03就是在本地配置了tomcat02的配置?
- 本质探究:
- 如上图,--link就是我们在hosts配置中增加了-个172.18.0.3 tomcat02 312857784cd4
- tomcat02 容器ping不通Tomcat03容器,其配置文件中没有Tomcat03记录
,
- 我们现在玩Docker已经不建议使用-link了。
- 自定义网络,不适用docker0。
- docker0问题:他不支持容器名连接访问。
自定义网络
- 查看所有的docker网络:docker network ls
网络模式
- bridge:桥接docker(默认,自己床架也使用bridge模式)
- none:不配置网络
- host:和宿主机共享网络
- container:容器网络连通(用的少,局限很大)
- 测试
- 我们直接启动的命令 --net bridge,而这个就是我们的docker0
docker run -d -P --name tomcat01 tomcat docker run -d -P --name tomcat01 --net bridge tomcat
自定义网络命令:docker network create
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 表示子网ip 可以分配 192.168.0.2 到 192.168.255.255
- --gateway 192.168.0.1 表示网关
- mynet 表示网络名
- 查看自己定义的网络
- 使用自己定义的网络启动容器
- 再次使用 docker network inspect mynet 查看网络信息
- 使用自定义网络 ping 容器的 ip 地址和名称都能 ping 通
- 我们自定义的网络docker都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络
- 好处:
- redis-不同的集群使用不同的网络,保证集群是安全和健康的
- mysql-不同的集群使用不同的网络,保证集群是安全和健康的
如何打通不同网段,实现连接
案例实践:docker network connect
- 查看mynet网络信息:docker inspect mynet
- 发现直接将tomcat01加过来了
- 这就是一个容器。两个ip地址
- 阿里云服务,两个ip,一个公网,一个私网
- 结论:假设要跨网络操作别人,就需要使用docker network connect连通
(docker笔记):Docker 网络、自定义网络
猜你喜欢
转载自blog.csdn.net/baidu_41388533/article/details/108570412
今日推荐
周排行