我们知道使用libcontainer可以迅速构建应用的运行环境。容器迁移时候需要把运行环境进行全部打包,这个时候libcontainer就出现短板,因此Docke镜像技术是Docker管理文件系统和运行环境一个完善。

Docker镜像的只读形式,在启动Docker容器中,文件系统结构和内容都包含在其中,Docker镜像是启动Docker容器的基础。Docker镜像的文件内容和配置文件组成了Docker容器的静态文件系统运行环境—— rootfs。简单的理解为:Docker镜像是Docker 容器的静态视角,Docker容器是Docker镜像的运行状态。

rootfs是Docker容器的根目录,在启动时Docker容器可见到的文件系统,rootfs包含了操作系统运行所需的文件系统,例如: /dev、/proc、/bin、/etc、/lib等Unix目录系统以及配置文件、工具等。我们知道,Linux操作系统内核启动时,需要挂载一个只读的根目录rootfs,检测完成以后,再切换成为读写模式。在Docker架构中,继续沿用Linux内核启动时的方法,挂载一个只读的根目录rootfs,挂载完成以后,利用联合挂载union mount技术在已有的只读根目录rootfs上再挂载一个读写层,这样可读写层处于Docker容器文件系统的最顶层,可以联合挂载很多个只读层,如果运行中文件发生了变化,变化的文件内容写到可读写层同时隐藏老版本。

Docker镜像设计上有哪些关键技术?

下面介绍Docker镜像设计上的关键技术:

1.分层技术

构建Docker镜像采用了分层方式,很多“镜像层”组成了镜像。Docker镜像能够如此轻量的原因是得益于分层技术,如果我们需要修改容器镜像内的文件,只能在读写层进行修改和变动,读写层中的原始文件依然存在,不会被新版本覆盖。如果这个时候使用docker commit修改容器文件系统作为新的镜像,保存以后的最新版本是最上层读写文件系统中被修改后的文件,因此,分层技术实现了不同镜像之间可以共享镜像层的效果。

2.内容寻址存储机制

内容寻址存储机制content-addressable storage的最主要作用是提高镜像安全性,它的工作原理是:文件内容来索引镜像和镜像层。和之前的版本所对应的镜像随机生成UUID,新的镜像计算值产生了一个哈希值,此哈希值镜像层的唯一标志。

3.写时复制策略

容器之间共享镜像,镜像层用只读的方式挂载在一个挂载点,覆盖一个可读写的容器层,在启动容器的时候不再需要复制镜像文件,这就是Docker镜像的写时复制(copy-on-write )策略。如果文件为更改,容器内的数据不变。如果有数据发生变化,变化的内容就会写的可读写层,这样做就可以减少容器启动的时间和磁盘空间资源占用。

4.联合挂载技术

联合挂载技术,简单来说就是一个挂载点同时挂载多个文件系统,将挂载点的原目录与被挂载内容进行整合,整合之后的各层的文件和目录包含在文件系统。

如上图,初始挂载时读写层为空,从用户的角度看,该容器的文件系统与底层的rootfs没有差别,从内核的角度来看,则是显式区分两个层次。修改镜像内的某个文件,最上方的读写层变动,不覆写下层已有文件系统的内容,原有文件在只读层中仍然是原始版本,会被新版文件所隐藏。当docker commit修改后的容器文件系统为一个新镜像,最上层读写文件系统中的文件被更新过。联合挂载技术是用于将多个镜像层的文件系统挂载到一个挂载点来实现一个统一文件系统视图的途径,是下层存储驱动(如aufs、overlay等)实现分层合并的方式。

Docker镜像不用写dockerfile,只简单配置就可以使用,构建速度快、调试和配置高效简洁,具有简化开发程序、分层技术节约具有开支的优点。

什么是Docker镜像?相关推荐

  1. Docker容器的备份与恢复,Docker镜像的备份与恢复

    1. 备份容器 首先,为了备份Docker中的容器,我们会想看看我们想要备份的容器列表.要达成该目的,我们需要在我们运行着Docker引擎,并已创建了容器的Linux机器中运行 docker ps 命 ...

  2. Docker 入门系列(2)- Docker 镜像, 免 sudo 使用 docker 命令、获取查看、修改镜像标签、查找删除创建镜像、导入导出镜像

    1. 免 sudo 使用 docker 命令 如果还没有 docker group 就添加一个 sudo groupadd docker 将用户加入该 group 内 sudo gpasswd -a ...

  3. Docker学习(三)-----Docker镜像常用命令

    六.Docker镜像 镜像是Docker的三大组件之一 Docker运行容器前需要本地存在对应的镜像,如果本地不存,Docker会从镜像仓库下载 6.1Docker获取镜像 6.1.1查找镜像 我们可 ...

  4. 客快物流大数据项目(十三):Docker镜像

    目录 Docker镜像 一.Docker镜像是什么 1.UnionFS(联合文件系统)

  5. Docker镜像优化

    Docker镜像优化 原文:Docker镜像优化 前言 上篇博文说到使用Visual Studio Tools for Docker帮助我们生成Dockerfile,现在我们讨论下生成的Dockerf ...

  6. 在内网中使用maven_maven构建docker镜像三部曲之三:推送到远程仓库(内网和阿里云)-Go语言中文社区...

    在上一章<maven构建docker镜像三部曲之二:编码和构建镜像>的实战中,我们将spring boot的web工程构建成docker镜像并在本地启动容器成功,今天我们把docker-m ...

  7. docker 镜像容器导入导出、查看日志、拷贝文件命令

    1. 本地文件拷贝到docker 容器中,参考 docker cp /root/pcl-pcl-1.8.1.tar.gz 7ff95b333e12:/docker cp /root/lib64_a 7 ...

  8. 通过Dockerfile构建Docker镜像

    Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. Dockerfile支持Shell类的行尾添 ...

  9. Docker镜像使用

    当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载. 下面我们来学习: 1.管理和使用本地 Docker ...

  10. 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上

    一个用于构建和推送Docker镜像的Maven插件. 使用Maven插件构建Docker镜像,将Docker镜像push到DockerHub上,或者私有仓库,上一篇文章是手写Dockerfile,这篇 ...

最新文章

  1. Maven 手动添加 JAR 包到本地仓库
  2. (NO.00003)iOS游戏简单的机器人投射游戏成形记(二)
  3. java的断点条件,java – Eclipse Debugger不会在条件断点处停止
  4. python序列化模块json和pickle
  5. 基于LSTM的研报分类系统
  6. 切割 字符串_web前端如何使用字符串
  7. vscode php函数提醒,解决vscode格式保存后出现的问题
  8. 【报告分享】2021年社区团购研究报告.pdf(附下载链接)
  9. 暴汗~莫明其妙收到一张汇款单......
  10. Json转对象 调用toBean
  11. 计算机科学导论佛罗赞第4版,计算机科学导论 原书第4版
  12. 安装linux系统的pe软件,Linux和win系统制作U盘pe启动方法
  13. SSL证书问题SSL certificate problem: self signed certificate
  14. 利用CSS3中的clac()实现按照屏幕分辨率自适应宽度
  15. jupyter notebook 误删恢复
  16. Windows/Ubuntu双系统磁盘管理中删除Ubuntu分区后Ubuntu EFI分区无法删除卷解决办法
  17. 小马哥robofly四轴气压计定高的不完全解读
  18. 车轮轨迹原理_在简单地形上小车运动轨迹的数学表达(一)
  19. 计算机辅助翻译stm,计算机辅助翻译报告.docx
  20. 冒险者传说pc6java_我的世界1.10.2冒险者传说

热门文章

  1. 银汇通支付解析固定pos机与移动pos机的优缺对比
  2. 如何在跳槽前客观地评估自己的身价?
  3. 20130822-STM8L101F3P6的PD0使用异常,尚未解决~!
  4. E680g手机电话本起死回生记
  5. 操作系统原理_田丽华(4)线程
  6. HD Tune中的各种信息表示的含义
  7. 倩女幽魂显示服务器繁忙,倩女幽魂手游新服首开服务器爆满,万人排队逼疯玩家...
  8. css+div练手-工作室
  9. Xamarin 打开相机 选择系统照片并上传服务器
  10. 解决鼠标移入子元素触发父元素的mouseout事件