docker网络,认识docker0,–link使用
前言
这里有博主对docker的基础总结:https://blog.youkuaiyun.com/hello_list/article/details/124221409
这篇文章没有说到docker网络,今天就是续上,看到没有,我说的会跟上的吧


认识docker0
我们安装完docker有没有发现,我们使用ip addr 命令后,是这样的,我们发现增加了一个docker0的内网地址:172.17.0.1
学过计算机网络的同学听到这里肯定就很容易理解,而且很简单了,但是没有学过计算机网络的同学,可以不用观看此文章,这只是作者的笔记,也不会讲的通俗易懂;

docker相当于Linux上的虚拟机容器,它也会像vmware一样创建自己的网卡,同时搭建自己的容器内网,而docker0就是网卡,通俗理解相当于路由器;
我们每启动一个容器,就会通过docker0来分配一个容器ip,通过主机—》docker0—-》容器,这样我们都是可以解析找到地址网络,也就是都可以ping的通的;
而容器之间,本身再docker0的子网下,在一个网段也都是可以ping的通的;
随便搜一张图片来理解:

这里也做下测试吧
我们启动两个tomcat9.0服务:
docker run -it -d -P --name tomcat01 tomcat:9.0
docker run -it -d -P --name tomcat02 tomcat:9.0
我这里已经启动了两个容器:

我们查看下他们各自的网络:
我们发现进入到容器内,没有ip addr 命令,这里是因为centos是压缩版的,其实我们应该先用dockerFile构建一个自己的镜像,但是不要担心,这里我们可以补救,这里不推荐大家这么使用,太慢了,等一会儿咱们构建个自己的镜像:

进入容器,先通过apt-get update更新软件包,然后我们apt-get install net-tools,就可以了,这是使用ifconfig命令,还可以使用,这是安装IP addr命令,都一样
apt update && apt install -y iproute2 # 因为安装这个不好安装,所以没有用这个

这里看下网络,tomcat01分配了172.17.0.2地址:

我们再看下tomcat02:

我们ping一下,发现不管是主机到容器,容器到容器都是可以ping通的
主机ping容器:

容器ping主机,我们需要安装一个ping命令
apt-get install inetutils-ping

容器ping容器,也是可以的:

但是我们通过名称呢,发现是不可以的;

思考:但是这样就产生了一个问题,我们只能通过启动容器docker分配的网络地址来使用,容器和容器之间,并不能通过固定的名称来互相访问,这样是不行的!
这里我们首先可以通过–link
比如我们在开启一个tomcat03,但是命令是这样的:
docker run -it -d -P --name tomcat03 --link tomcat02 tomcat:9.0
我们进入容器tomcat3,试着通过名字去ping tomcat02,测试可以ping通:

那用tomcat02 ping tomcat03呢,还是不可以的:

那它这个原理呢,其实很简单,我们查看下容器中/etc/hosts目录,其实就是把ip地址和名字做了下绑定:

所以我们可以ping到02其实还是找到了它的IP地址,但是这种方式我们不怎么使用,因为后面还有更好的方式,就是我们可以自定义网络,下一篇自定义网络;
我们还可以通过docker network inspect 容器id查看网络信息
小结
下一篇我们看下docker如何自定义网络,谢谢支持,bye~

本文介绍了Docker的默认网络docker0,它作为容器间的桥梁,允许容器间通信。通过--link参数,可以实现容器间的名称解析,但这种方式已逐渐被淘汰。文章还探讨了容器通过主机名无法直接互访的问题,并预告了自定义网络的解决方案。
2057





