当前位置: 首页 > news >正文

docker笔记4-镜像理解

docker笔记4-镜像理解

  • 一、镜像原理之联合文件系统
  • 二、镜像原理之分层理解
  • 三、commit镜像


一、镜像原理之联合文件系统

UnionFS(联合文件系统): Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)Union 文件系统是 Docker 镜像的基础。(类似git中的提交,每次都可以在之前的版本上继续叠加,修改为新的版本)。

二、镜像原理之分层理解

在这里插入图片描述bootfs(boot file system)主要包含 bootloaderkernelbootloader 主要是引导加载 kernelLinux 刚启动时会加载 bootfs 文件系统,在docker 镜像的最底层是 bootfs。这一层与我们典型的 Linux/Unix 系统是一样的,包含 boot 加载器和内核。当 boot 加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs 转交给内核,此时系统也会卸载 bootfs

rootfs(root file system),在 bootfs 之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs 就是各种不同的操作系统发行版,比如 Ubuntu,centos 等等。

平时我们安装进虚拟机的 centos 都是好几个G,为什么 docker 这里才200M?

这是因为对于一个精简的 OS,rootfs 可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用 Hostkernel,自己只需要提供 rootfs 就可以了。由此可见对于不同的 linux 发行版,bootfs 基本是一致的,rootfs 会有差别, 因此不同的发行版可以公用 bootfs

三、commit镜像

简单理解就是通过commit来不断更新镜像的内容。
案例:启动tomcat容器,并通过commit保存可直接运行的tomcat镜像。

docker run -it -p 8080:8080 tomcat
docker ps # 查看下启动的tomcat容器

然后,复制一下当前连接,开启另一个连接窗口

 docker exec -it imageId /bin/bash # 切入到docker容器中

查看webapps下,发现没有任何文件,此时虽然启动了tomcat容器,但是无法访问tomcat: https: ip: 8080。主要原因在于用于启动tomcat的文件都在webapps.dist文件中,因此,需要将webapps.dist中的文件复制到webapps中。

cp -r webapps.dist/* webapps

想一下,如果我每次启动tomcat容器,都要去进行文件的复制,很繁琐。那么commit关键字就可以做到保存当前运行的容器镜像。

docker commit -a="作者" -m="操作" imageId tomcat02:1.0

这其实就类似于git中的commit操作,保存每次的修改为一个版本,每次都可在原先的版本基础上叠加。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [解决方法]git上传的项目markdown文件的图片无法显示
  • 视频下载(m3u8或者其他格式的)
  • 创建vue2/vue3项目
  • 计算机网络八股文(三)
  • 使用vscode搜索打开的文件夹下的文件
  • 闲鱼、抖音、快手纷纷入局,“谷子”经济千亿市场纷争再起
  • java之回合制游戏以及如何优化
  • 【python】OpenCV—Shape Detection
  • 编写自动化测试(11)
  • 测试开发面试题---JVM
  • 基于ansible进行运维自动化的研究以及相关的属性
  • 【区块链+绿色低碳】双碳数字化管控平台 | FISCO BCOS应用案例
  • NET 语言识别,语音控制操作、语音播报
  • leetcode位运算(1684. 统计一致字符串的数目)
  • Google Chrome 浏览器在链接上点右键的快捷键
  • hadoop集群管理系统搭建规划说明
  • IDEA常用插件整理
  • Java编程基础24——递归练习
  • JAVA多线程机制解析-volatilesynchronized
  • Promise面试题,控制异步流程
  • python大佬养成计划----difflib模块
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • use Google search engine
  • 创建一个Struts2项目maven 方式
  • 关于使用markdown的方法(引自CSDN教程)
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 记一次和乔布斯合作最难忘的经历
  • 通信类
  • 微信支付JSAPI,实测!终极方案
  • 小试R空间处理新库sf
  • linux 淘宝开源监控工具tsar
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​ArcGIS Pro 如何批量删除字段
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #include
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (转)母版页和相对路径
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .NET NPOI导出Excel详解
  • .net6+aspose.words导出word并转pdf
  • .pyc文件是什么?
  • @ModelAttribute注解使用
  • @RequestParam详解
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [000-01-018].第3节:Linux环境下ElasticSearch环境搭建
  • [012-1].第12节:Mysql的配置文件的使用
  • [20171102]视图v$session中process字段含义
  • [ABC275A] Find Takahashi 题解
  • [AHK V2]鼠标悬停展开窗口,鼠标离开折叠窗口
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用
  • [Android] Amazon 的 android 音视频开发文档
  • [Android]使用Android打包Unity工程