2021-07-24-docker网络

假设目前的doker的纯净的。
那么在linux内,
ip addr
分析三个地址
第一个是Lo会换地址
第二个是etho 云服务器内网地址
第三个是docker0 装了docker就有的地址。相当于路由器(有转发功能)


docker启动一个tomcat
docker exec -it -p id ip addr
可以看到有两个ip地址
lo 这个是回环地址
eth0@if123 这个是docker给容器的地址。

然后在linux中
ip addr
会看见除了原来的那三个ip地址外多了一个地址veth开头的,并且是与刚才那个地址相连号的。

为什么容器和docker0可以ping通
简单来说:
每次启动一个容器,出现两个ip,
①eth0:是docker给容器的ip,简称容器ip
②vethc: 是在linux中ip addr 的ip
相当于给了一个ip表给linux,所以ping通

然后又可以转发

因此在外部可以ping通,容器间也可以ping通

ping操作:
外部:
ping ip

容器内:
docker exec -it container_name ip addr
docker exec -it container_name ping container_ip
注意:这里是 服务名 ping IP 是可以ping通的
但是 container_name1 ping container_name2 是不可以的,这是一个问题,下面解决


解决方案1:

虽然不推荐使用,但是还是要康康的

启动的时候通过 --link单向连接 ,所以可以通过两个服务名单向ping通
docker run -d -p 8802:8080 --name mytomcat02 --link mytomcat01 docker.io/tomcat

实质:在/etc/hosts文件中配置了另一个容器的ip

解决方案2:
通过自定义网络解决。
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
设置子网掩码,网关 ,名称
docker network ls
docker network inspect id/name

实际上之前使用的run命令默认的网络docker0,即网络的设置,现在可以通过–net使用自己搭建的网络,而且当使用了这个网络后,就与其它tomcat容器ping不通了,因为网络不同了

但是重要的是这个:现在使用自定义的网络创建两个tomcat,尝试ip 来ping 和服务名ping 发现都可以ping通 ,这就是自定义网络的好处。

因此,redis集群开一个网络,mysql开一个网络,这样,不同服务之间是隔离的,保证安全性。但也是可以打通的。下面讲解。


暂且不了解。
docker network inspect 所有详情
docker inspect container_id 查看指定容器详情


如何让两个在不同网络的容器连通。
首先明确一点,不能直接打通两段网络,
正确的操作是一个容器连接另一个网络,这样这个容器就可以连通另一个网络的容器了,相当于这个容器不仅有自己的网络,同时拥有了另一个网络,相当于 ,1个容器两个IP,换句话说就是相当于云服务器,有公网和内网两个网络的原理类似。

实质上是把容器加入了网络中

docker network connet NetWork Container
操作成为跨网操作

结果:随便ping都能通

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值