docker网络,认识docker0,–link使用
前言
这里有博主对docker的基础总结:https://blog.csdn.net/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~