要想学透这玩意,高级技术、底层原理都要研究。在这记一下镜像的实现原理、容器间网络配置和数据卷的的相关概念:

参照docker一个中文的wiki站:https://vuepress.mirror.docker-practice.com/image/internal/

1、镜像的实现原理
Docker 镜像是怎么实现增量的修改和维护的?

每个镜像都由很多层次构成,Docker 使用 Union FS

(opens new window) 将这些不同的层结合到一个镜像中去。

通常 Union FS 有两个用途, 一方面可以实现不借助 LVM、RAID 将多个 disk 挂到同一个目录下,另一个更常用的就是将一个只读的分支和一个可写的分支联合在一起,Live CD 正是基于此方法可以允许在镜像不变的基础上允许用户在其上进行一些写操作。

Docker 在 OverlayFS 上构建的容器也是利用了类似的原理。

贴了一段,果然,看不懂。说说自己的理解:

拉取镜像时镜像会非常大,而且拉取时会去分段拉取,这个分段就证明了镜像不仅仅只是一个软件,而是包含了操作系统依赖、软件包依赖和自身的软件等等

所以有时候下镜像会非常快,会一直提示其中有一些分段已经存在了。这样就避免了资源的重复下载。就是上面的UnionFS,采用分层机制实现了基础层共享,从而减小了docker仓库的整体体积

1.PNG

如上图,bootfs可以做资源共享,而且每个镜像其实就是精简的OS操作系统,在rootfs层也可以实现部分资源共享。所以好多分段不需要重新下载,这种分层结构最好的地方就是资源共享和减少docker仓库体积

2、Docker高级网络配置

比较关键的是多网桥,先贴一个wiki中关于网桥的概念图:

2.PNG

可见容器与主机实现通信,docker引擎是中间的网桥,数据包通过容器启动时自己同时生成的接口传输。去docker中建一个网桥看一看效果:

既然会给容器分配私有网段的ip,那么不同容器如果在同一网桥(该私有网段下),是可以实现容器间和容器间调用的:

docker network ls              #查看docker网桥配置

docker inspect 网桥id          #查看网桥详细

3.PNG

如图,我就去使用bridge这个默认网桥,可以看到网桥的网关为172.17.0.1,网段为172.17.0.0/16。现在以这个网段起两个nginx容器,可以看见该网段对这两个容器分配了两个私有ip并且可以实现容器内相互通信:

4.PNG

坑:我也不知为啥两个容器不能互相curl,网上有说把域名指向到10.0.75.2啊,太麻烦了没有试,而且昨天ubuntu又中了伊邪那美了,所以就叒重装了,凢啊。接着往下看,下头是创建私有网桥指令和以该网桥启动容器,可以发现容器启动后会被分配新的私有ip地址段,指令:

2021-08-11 为啥不能互相curl,因为我好像忘加容器内端口了。。ng curl80端口没试,反正今天用两个tomcat互相curl 需要ip:port或者 name:port(port为容器port)

docker network create nginx
docker run -d -p 8892:80 --name mynginx001 --network nginx nginx
docker run -d -p 8893:80 --name mynginx002 --network nginx nginx

5.PNG

删除自定义网桥:

docker network rm 网桥名字

注意:

1、一旦容器启动时指定了网桥,日后和这个网桥关联的所有容器可以实现容器内互相通信

2、使用docker run --network 网桥名字 时, 这个网桥必须存在

3、数据卷

数据卷最主要的作用就是实现容器和宿主机的数据共享啦。

特点:

6.PNG

数据卷的指令操作和自定义网桥很像,上节记过几个,记几个没用过的和最关键的,例:

docker volume prune     #删除没用过的数据卷

docker run -v 绝对路径:容器内路径  #自定义数据卷目录

docker run -v 卷名(以前没创建的话自动创建):容器内路径      #自动创建数据卷

其他的像创建、删除指定、查看、查看详细都和网桥一样,把network 改成 volume

总结:数据卷和网桥会经常被使用,比如接下来要安装mysql、nginx、redis等等等都要用到,但是接下来我就先把安装这些跳过了,先去看dockefile和docker-compose


标题:Docker(3)
作者:jyl
地址:http://jinyunlong.xyz/articles/2021/08/07/1628351119222.html