百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

从零开始学K8S(三):容器的创新技术镜像——联合文件系统

bigegpt 2024-09-27 00:46 4 浏览

各位小伙伴大家好,我是运维虫子!

上一篇文章,我们知道了容器的两大核心,namespace与cgroup,也清楚了他们的工作原理以及docker与传统虚拟化的区别。

今天我们来了解一下docker的镜像。这次我们从docker镜像使用文件系统开始聊起。

联合文件系统

docker支持多种graphDriver(联合文件系统),包括vfs,deviceMapper,overlay,overlay2,aufs等,其中最常用的是aufs,但是随着Linux内核把overlay引入以后,overlay就越来越受到重视了。

什么是联合文件系统呢,我们以overlay来举例,overlayfs通过三个目录:lower目录、upper目录、以及work目录实现,其中lower目录可以是多个,work目录为工作基础目录,挂载后内容会被清空,且在使用过程中其内容用户不可见,最后联合挂载完成给用户呈现的统一视图称为为merged目录。

先来看以下的文件结构:

[root@Docker ~]# tree 
.
├── chongzi1
│   ├── a
│   └── b
└── chongzi2
    ├── b
    └── c

2 directories, 4 files

通过overlay联合挂载到一个新的目录chongzi:

 mount -t overlay overlay -o lowerdir=chongzi1,upperdir=chongzi2,workdir=chongzi chongzi

这时候,我们可以看到chongzi1和chongzi2的文件已经联合挂载到chongzi目录下了。

注:不知道大家有没有注意,我故意创建了两个b文件,那么联合挂载以后显示的b是哪个目录下的b呢,大家可以自行判断一下。

[root@Docker ~]# tree
.
├── chongzi
│   ├── a
│   ├── b
│   └── c
├── chongzi1
│   ├── a
│   └── b
└── chongzi2
    ├── b
    └── c

我们进行一个删除操作:

[root@Docker ~]# cd chongzi
[root@Docker ~]# rm -rf a
[root@Docker ~]# cd
[root@Docker ~]# tree
.
├── chongzi
│   ├── b
│   └── c
├── chongzi1
│   ├── a
│   └── b
└── chongzi2
    ├── a
    ├── b
    └── c

我们可以看到chongzi目录下a已经没了,但是为什么chongzi2下面还有个a呢?大家可以通过下面的图来思考一下。


容器镜像为了看起来更加真实,我们一般会把一个操作系统的文件挂载给镜像的“/”目录,而这个挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统,就是所谓的“容器镜像”。它还有一个更为专业的名字,叫作:rootfs(根文件系统)。

在上述图中可以看到三个层结构,即:lowerdir、uperdir、merged,其中lowerdir是只读的image的layer,其实就是rootfs。而upperdir则是在lowerdir之上的一层,这层是读写层,在启动一个容器时候会进行创建,所有的对容器数据更改都发生在这里层。最后merged目录是容器的挂载点,也就是给用户暴露的统一视角。


docker镜像

了解联合文件系统以后,我们来进一步分析一下docker镜像。

容器镜像为了看起来更加真实,我们一般会把一个操作系统的文件挂载给镜像的“/”目录,而这个挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统,就是所谓的“容器镜像”。它还有一个更为专业的名字,叫作:rootfs(根文件系统)。

docker info,查看docker的文件系统默认存储:

docker info


图中可以看出现在的docker默认版本已经是overlay2。所以我们重点来看看overlay2。

我们通过构建一个Ubuntu镜像的过程来了解:

[root@Docker ~]# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
da7391352a9b: Pull complete 
14428a6d4bcd: Pull complete 
2c2d948710f2: Pull complete 
Digest: sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

对Ubuntu镜像进行查看

 docker image inspect ubuntu:latest

可以看到Ubuntu镜像对应的目录LowerDir,UpperDir,MergedDir,WorkDir以及对应的rootfs。


我们启动一个Ubuntu容器进行查看:

docker run -idt --name yunweichongzi ubuntu:latest

查看overlay2挂载情况:

[root@Docker ~]# mount | grep overlay
overlay on /var/lib/docker/overlay2/6536a9b8521249193d4f8a1e18729deaedae1e321f87b09cd97e7be675d459c9/merged type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/l/APOHNZ2NXGCRL4CDRYDQN65DXA:/var/lib/docker/overlay2/l/TKGVO7PGF23AKNZCUFXHHPWQOY:/var/lib/docker/overlay2/l/6KA4DCYAIJQG4FBUVMHX5GR6M4:/var/lib/docker/overlay2/l/3P6DVX2OJPFSAE5ITF43POQHJG,upperdir=/var/lib/docker/overlay2/6536a9b8521249193d4f8a1e18729deaedae1e321f87b09cd97e7be675d459c9/diff,workdir=/var/lib/docker/overlay2/6536a9b8521249193d4f8a1e18729deaedae1e321f87b09cd97e7be675d459c9/work)


查看工作目录,发现已经包含了完整的操作系统文件:

 ls /var/lib/docker/overlay2/ID/merged/
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

查看init目录:

 ls /var/lib/docker/overlay2/ID/diff/
dev  etc


因此,一个容器完整的层应由三个部分组成,如下图:

镜像层:也称为rootfs,提供容器启动的文件系统。

init层: 用于修改容器中一些文件如/etc/hostname、/etc/resolv.conf等

容器层:使用联合挂载统一给用户提供的可读写目录。

总结

正是因为docker的rootfs增量以及联合挂载系统,才有了容器镜像的层,同时也保证了容器镜像的环境一致性,容器完美的解决了“开发到测试到部署”的每一个流程。这也正是容器的魅力所在。

通过三篇文章,我们对docker有了更清晰的认识。一个“容器”,实际上是一个由 Linux Namespace、Linux Cgroups 和 rootfs 三种技术构建出来的进程的隔离环境。

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上。

下一篇:我们来说说k8s到底是什么?


多年致力于互联网搬砖,各种互联网技术都稍有涉猎。如果大家遇到一些问题可以私信或者留言给我。我们可以一起讨论!

相关推荐

有些人能留在你的心里,但不能留在你生活里。

有时候,你必须要明白,有些人能留在你的心里,但不能留在你生活里。Sometimes,youhavetorealize,Somepeoplecanstayinyourheart,...

Python学不会来打我(34)python函数爬取百度图片_附源码

随着人工智能和大数据的发展,图像数据的获取变得越来越重要。作为Python初学者,掌握如何从网页中抓取图片并保存到本地是一项非常实用的技能。本文将手把手教你使用Python函数编写一个简单的百度图片...

软网推荐:图像变变变 一“软”见分晓

当我们仅需要改变一些图片的分辨率、裁减尺寸、添加水印、标注文本、更改图片颜色,或将一种图片转换为另一种格式时,总比较讨厌使用一些大型的图像处理软件,尤其是当尚未安装此类软件时,更是如此。实际上,只需一...

首款WP8.1图片搜索应用,搜照片得资料

首款WP8.1图片搜索应用,搜照片得资料出处:IT之家原创(天际)2014-11-1114:32:15评论WP之家报道,《反向图片搜索》(ReverseImageSearch)是Window...

分享一组美图(图片来自头条)(头条美女头像)

...

盗墓笔记电视剧精美海报 盗墓笔记电视剧全集高清种子下载

出身“老九门”世家的吴邪,因身为考古学家的父母在某次保护国家文物行动时被国外盗墓团伙杀害,吴家为保护吴邪安全将他送去德国读书,因而吴邪对“考古”事业有着与生俱来的兴趣。在一次护宝过程中他偶然获得一张...

微软调整Win11 24H2装机策略:6月起36款预装应用改为完整版

IT之家7月16日消息,微软公司今天(7月16日)发布公告,表示自今年6月更新开始,已默认更新Windows1124H2和WindowsServer2025系统中预装...

谷歌手把手教你成为谣言终结者 | 域外

刺猬公社出品,必属原创,严禁转载。合作事宜,请联系微信号:yunlugongby贾宸琰编译、整理11月23日,由谷歌新闻实验室(GoogleNewsLab)联合Bellingcat、DigD...

NAS 部署网盘资源搜索神器:全网资源一键搜,免费看剧听歌超爽!

还在为找不到想看的电影、电视剧、音乐而烦恼?还在各个网盘之间来回切换,浪费大量时间?今天就教你如何在NAS上部署aipan-netdisk-search,一款强大的网盘资源搜索神器,让你全网资源...

使用 Docker Compose 简化 INFINI Console 与 Easysearch 环境搭建

前言回顾在上一篇文章《搭建持久化的INFINIConsole与Easysearch容器环境》中,我们详细介绍了如何使用基础的dockerrun命令,手动启动和配置INFINICon...

为庆祝杜特尔特到访,这个国家宣布全国放假?

(观察者网讯)近日,一篇流传甚广的脸书推文称,为庆祝杜特尔特去年访问印度,印度宣布全国放假,并举办了街头集会以示欢迎。菲媒对此做出澄清,这则消息其实是“假新闻”。据《菲律宾世界日报》2日报道,该贴子...

一课译词:毛骨悚然(毛骨悚然的意思是?)

PhotobyMoosePhotosfromPexels“毛骨悚然”,汉语成语,意思是毛发竖起,脊梁骨发冷;形容恐惧惊骇的样子(withone'shairstandingonend...

Bing Overtakes Google in China's PC Search Market, Fueled by AI and Microsoft Ecosystem

ScreenshotofBingChinahomepageTMTPOST--Inastunningturnintheglobalsearchenginerace,Mic...

找图不求人!6个以图搜图的识图网站推荐

【本文由小黑盒作者@crystalz于03月08日发布,转载请标明出处!】前言以图搜图,专业说法叫“反向图片搜索引擎”,是专门用来搜索相似图片、原始图片或图片来源的方法。常用来寻找现有图片的原始发布出...

浏览器功能和“油管”有什么关联?为什么要下载

现在有没有一款插件可以实现全部的功能,同时占用又小呢,主题主要是网站的一个外观,而且插件则主要是实现wordpress网站的一些功能,它不仅仅可以定制网站的外观,还可以实现很多插件的功能,搭载chro...