Docker入门及docker网络详解笔记

  • docker三要素:仓库,镜像,容器
  • 备忘链接:
  1. Docker官方安装手册
  2. 阿里云容器镜像加速器
  3. 这可能是最为详细的Docker入门吐血总结
  4. B站尚硅谷周杨Docker基础入门
  5. B站尚硅谷基础入门笔记详解
  6. B站狂神Docker网络详解

1.初始的linux网络

$ ip addr

1

2.docker容器网络分析

1.先创建一个tomcat容器tomcat01

$ docker run -it --name tomcat01 tomcat
$ docker exec -it tomcat01 ip addr   #观察容器内网络地址

2

  • 蓝色框的后面会用到,和后面会呼应起来。
  • 我们再用inspect看一下
$ docker inspect tomcat01

22

2.这时,我们再次观察主机内的ip addr状态

3

  • 这里我们可以发现容器内部网卡状态和主机外面新增的网卡,有了一个呼应。

3.尝试ping下容器内部的ip

$ ping 172.17.0.2

26

  • 那么这是用了一个什么技术呢?
  • 用的时evth-pair技术,是一对虚拟设备接口,相当于一个桥梁。
  • 在这里插入图片描述

4.然后我们再启动一个容器tomcat02

$ docker run -d -P --name tomcat02 tomcat
$ docker exec -it tomcat02 ip addr

12

  • 同第一个tomcat01对比,注意蓝框

5. 我们再次观察主机内的ip addr状态

32

  • 新增的网卡与tomcat02中的网卡地址也是呼应的,同tomcat01一样。
  • 同理,再主机内ping tomcat02一样可以通。

6.那么tomcat01与02相互可以ping通吗?

$ docker exec -it tomcat01 ping 172.17.0.3

2212

$ docker exec -it tomcat02 ping 172.17.0.2

32

  • 证明容器实例之间都是可以ping通的。

7.图示总结

  • 我们可以发现宿主机内的docker0网卡地址为172.17.0.1,与tomcat01(172.17.0.2)、tomcat02(172.17.0.3),属于同一网段,故肯定可以相互ping通。
    43
  • 总体的图示:
  • docker01只要一安装Docker就会存在。
  • docker01可以理解为一个路由器,各个容器实例我们可以理解为链接着路由器的手机。
  • 容器之间ping通是通过docker01进行的。
  • docker0如何与外部网络进行联通:docker0通过NAT直连物理网卡,与外网进行通信(图上忘记画出来了)。
  • Docker中所有的网络接口都是虚拟的。
    在这里88片描述

3.docker0可以分配多少个ip给容器?

  • 这里涉及一些计算机网络的知识。
  • 例如 255.255.0.0/16啥意思?表示IP地址/掩码16位。
  • 56
  • 255.255.0.0/24,同样的道理,只不过子网掩码为24位,只有8位可以用来表示子网ip。

4.可不可以通过容器的名字ping通容器呢?

1.想法验证

  • 为什么会有这种想法:比如我们机器重启之后,可能每一个容器的ip都会发生变化,这样的话,如果仍旧使用原来ip,容器之间就没法相互联通了。如果我们一个一个修改ip的话,就会很麻烦。所以我们看看只ping容器的名字,能不能联通,如果能,就解决了上述的问题。
$ docker run -d -P --name tomcat01 tomcat
$ docker run -d -P --name tomcat02 tomcat
$ docker exec -it tomcat02 ping tomcat01

meiyou

-发现是不能ping通的。同理,tomcat01去ping tomcat02的话,依旧不通。

2.使用–link,可以完美实现吗?

  • 我们创建一个容器tomcat03,并且link到tomcat01,看看行不行?
$ docker run -d -P --name tomcat03 --link tomcat01 tomcat
$ docker exec -it tomcat03 ping tomcat01

111

  • tomcat03 ping tomcat01 是可以ping通的。那反向可以吗?
$ docker exec -it tomcat01 ping tomcat03

434

  • 你会发现无法ping通,这就是–link的坑。
  • 当然我们可以通过重启tomcat01来去–link到tomcat03,实现tomcat01可以ping到tomcat03,但是着实的有点麻烦。

3.为何不能反向ping通?

  • 我们去查看容器的文件/etc/hosts,来理解。
  • linux 的/etc/hosts是配置ip地址和其对应主机名的文件,这里可以记录本机的或其他主机的ip及其对应主机名。
    323
  • 所以不推荐使用- -link。

5.自定义网络

1.基础知识

1.1Docker中有哪些网络模式

$ docker network ls  #Docker中有哪些网络模式

在这里插入图片描述

  1. bridge:桥接模式,docker默认的是桥接模式
  2. none:不配置网络
  3. host:与主机共用网络
  4. container:容器网络联通,用的少,局限性多

1.2启动容器的时候的默认网络参数

#下面这两种方式都是相同的,--net bridge所建立的桥,就是docker0
$ docker run -d -P --name tomcat01 tomcat
$ docker run -d -P --name tomcat01 --net bridge tomcat
  • 既然网络模式的参数可以指定,那么我们可以自定义网络,使容器连接于自定义网络。

2.创建自定义网络

2.1查看docker的网络创建命令

$ docker network --help

在这里插入图片描述

$ docker network create --help

在这里插入图片描述

  • 创建网络的时候,我们只需要,设置上边两个即可。(视频听来的,计网没学好)

2.2创建自定义网络

$ docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

在这里插入图片描述

$ docker network ls

在这里插入图片描述

  • 我们创建的网络已经出来了
  • 查看mynet网络
$ docker network inspect mynet

在这里插入图片描述

2.3将容器发布到mynet

$ docker run -d -P --name tomcat-net-01 --net mynet tomcat
$ docker run -d -P --name tomcat-net-02 --net mynet tomcat

在这里插入图片描述

  • 发布完成
  • 我们再查看一下,我们自定义的网络mynet
$ docker network inspect mynet

在这里插入图片描述

  • 我们发现在mynet下,多了两个我们启动的容器。

2.4验证结果

$ docker exec -it tomcat-net-02 ping tomcat-net-01
$ docker exec -it tomcat-net-01 ping tomcat-net-02

在这里插入图片描述
在这里插入图片描述

  • 这个时候,容器链接使用容器名,也是可以相互ping通的。
  • 但是原因是什么,我还不清楚。

6.网络联通

1.网段不同的容器间,该如何联通呢?

  • 假如,有一个redis集群和一个mysql集群
  • redis集群包括很多redis容器,且处于192.160.0.0网段;mysql集群包括很多mysql容器,且处于192.161.0.0网段
  • 集群内部的容器们,肯定是可以相互ping通的,那么两个集群之间如何联通呢?也就是说redis0n如何ping到mysql0n?
    在这里插入图片描述

2.实现不同网段的网络联通

2.1模拟环境

  1. 在docker01(默认的)下创建两个tomcat容器
$ docker run -d -P --name tomcat-docker01 tomcat
$ docker run -d -P --name tomcat-docker02 tomcat

在这里插入图片描述

  1. 之前的mynet下,还有tomcat-net-01和tomcat-net-02,此时网络模型为:

43

  1. 我们是这样实现将两个网关(卡)之间链接吗?如图。
    在这里插入图片描述
  • 这样显然是不对的,这样的话,两个网络就变了。
  • 应该是这样的,将一个网关下的容器链接到另一个网关,从而使该容器可以ping通另一个网关下的全部容器。
    在这里插入图片描述

2.2查询命令connect

$ docker network --help

在这里插入图片描述

$ docker network connect --help

在这里插入图片描述

2.3将tomcat-docker02连接到mynet

$ docker network connect mynet tomcat-docker02   #这里是无任何返回的
  • 然后在查看一下mynet网络情况
$ docker network inspect mynet

在这里插入图片描述

  • 可以看到该网络,已经出现了tomcat-docker02。
  • 然后我们再去看一下tomcat-docker02的ip addr。
$ docker exec -it tomcat-docker02 ip addr

在这里插入图片描述

  • 可以看到,又多出来了一个虚拟接口,而且和mynet中新增的那个对应。
  • 其实,也就是一个容器两个ip。

2.4尝试ping通

  • 尝试从tomcat-docker02 ping
$ docker exec -it tomcat-docker02 ping tomcat-net-01
$ docker exec -it tomcat-docker02 ping tomcat-net-02

在这里插入图片描述
在这里插入图片描述

  • 已经实现了跨网络ping通。

  • 再尝试从tomcat-docker01 ping

$ docker exec -it tomcat-docker01 ping tomcat-net-01

在这里插入图片描述

  • 因为tomcat-docker01没有联通到mynet,故其不能ping通。
  • 尝试从tomcat-net-01和tomcat-net-02 ping tomcat-docker02,看看行不行?
$ docker exec -it tomcat-net-01 ping tomcat-docker02
$ docker exec -it tomcat-net-02 ping tomcat-docker02

在这里插入图片描述
在这里插入图片描述

  • 可以看到都是ok的。

2.5网络模型

  • 此时的网络模型为(虚拟网络接口未画出):
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辛集电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值