朋友们好,我是一个操作虫!
在上一篇文章中,我们了解了容器的两个核心,名称空间和cgroup,也清楚了它们的工作原理以及docker和传统虚拟化的区别。
今天,我们来看看docker的镜像。这一次,让我们从使用文件系统的docker映像开始。
联合文件系统
Docker支持多种graphDriver(统一文件系统),包括vfs、deviceMapper、overlay、overlay2、aufs等。其中aufs是最常用的一种,但随着Linux内核引入overlay,overlay也越来越受到重视。
什么是联邦文件系统?我们以叠加为例。overlayfs由三个目录实现:下级目录、上级目录和工作目录,其中下级目录可以是多个,工作目录是工作基目录。挂载后内容会被清除空,用户在使用过程中看不到其内容。最后,联合挂载完成后呈现给用户的统一视图称为合并目录。
让我们先来看看下面的文件结构:
[root @ docker ~] # tree。├—重子1 │├— A │└— B └—重子2 ├— B └— C2目录,4个文件通过叠加共同挂载到一个新的目录中。
mount-t overlay overlay-o lower dir = chongzi1,upper dir = chongzi2,workdir = chongzi chongzi此时我们可以看到,chongzi 1和chongzi2的文件已经联合挂载到了chong zi目录中。
注:不知道大家有没有注意到,我是故意创建了两个B文件,那么联合挂载后显示的是哪个目录B呢?你可以自己判断。
[root @ docker ~] # tree。├├├├│├├│├└└├├├├ζ│└└└ζζζζζζ^└
[root @ Docker ~]# CD chongzi[root @ Docker ~]# RM-RF a[root @ Docker ~]# CD[root @ Docker ~]# Tree。├——冲子│├—— B │└—— C ├——冲子1 │├—— A │└—— B └——冲子2 ├—A ├你可以通过下图来思考一下。
为了看起来更真实,我们通常会把一个操作系统的文件挂载到镜像的“/”目录下,而这个挂载在容器根目录下,用来为容器进程提供隔离执行环境的文件系统就叫做“容器映像”。它还有一个更专业的名字,叫做:rootfs(根文件系统)。
上图可以看到三个层结构,分别是:lowerdir、uperdir和merged,其中lowerdir是只读镜像的层,实际上就是rootfs。上层是下层之上的一层。这一层是读写层,它是在容器启动时创建的,对容器数据的所有更改都发生在这里。最后,合并的目录是容器的挂载点,这是向用户公开的统一透视图。
docker镜像
了解了联邦文件系统之后,让我们进一步分析docker映像。
为了看起来更真实,我们通常会把一个操作系统的文件挂载到镜像的“/”目录下,而这个挂载在容器根目录下,用来为容器进程提供隔离执行环境的文件系统就叫做“容器映像”。它还有一个更专业的名字,叫做:rootfs(根文件系统)。
Docker信息,检查docker的文件系统默认存储:
码头信息
从图中可以看出,目前docker的默认版本已经是overlay2。所以我们把重点放在overlay2上。
通过构建Ubuntu映像的过程,我们知道:
[root @ Docker ~]# Docker Pull ubuntuUsing默认标签:latest latest:Pulling from library/Ubuntu da 7391352 a9b:Pull complete 14428 a6 D4 BCD:Pull complete 2c 2d 948710 f 2:Pull complete Digest:sha 256:c 95 A8 e 48 BF 88 e 9849 f 3 E0 f 723d 9 f 49 fa 12 C5 a 00 cf c6e 60d 299d 8755295 e4c状态:下载了较新的Ubuntu映像:最新
Docker镜像检查Ubuntu: latest可以看到Ubuntu镜像对应的目录,比如LowerDir、UpperDir、MergedDir、WorkDir以及对应的rootfs。
让我们启动一个Ubuntu容器来检查一下:
Docker Run-IDT-Name魏云冲子Ubuntu:最新查看覆盖2挂载状态:
[root @ Docker ~]# mount | grep overlay overlay on/var/lib/Docker/overlay 2/6536 a9b 8521249193 D4 F8 a1 e 18729 deae ade E1 e 321 f 87 b 09 CD 97 e 7 be 675d 459 c 9/merged type overlay(rw,relatime,lower dir =/var/lib/Docker/overlay 2/l/apohnz 2 nxgcrl 4 dry dqn 65 dxa:/var/l
查看工作目录,我们发现它已经包含完整的操作系统文件:
ls/var/lib/docker/overlay 2/id/merged/bin boot dev etc home lib 32 lib 64 libx 32 media mnt opt proc root run sbin srvsys tmpusrvar view init directory:
ls/var/lib/docker/overlay 2/ID/diff/dev等
因此,一个完整的容器层应该由三部分组成,如下图所示:
镜像层:也称为rootfs,提供容器启动的文件系统。
init层用于修改容器中的一些文件,如/etc/hostname、/etc/resolv.conf等。
容器层:使用联合挂载提供给用户的可读可写的目录。
总结
正是因为docker的rootfs增量和联合挂载系统,才有了一层容器镜像,同时也保证了容器镜像的环境一致性。容器完美地解决了从开发到测试到部署的每一个过程。这也是容器的魅力所在。
通过三篇文章,我们对docker有了更清晰的认识。“容器”实际上是由三种技术构建的进程的隔离环境:Linux名称空间、Linux Cgroups和rootfs。
Docker是一个开源的应用程序容器引擎,它允许开发人员将其应用程序和依赖项打包成一个可移植的映像,然后将其发布到任何流行的Linux或Windows机器上。
接下来:我们来说说k8s到底是什么?
多年来致力于互联网搬砖,各种互联网技术都有涉猎。如果你遇到一些问题,可以给我私信或者留言。我们可以一起讨论!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。
作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/252600.html