目录

是什么

UnionFS(联合文件系统)

Docker镜像加载原理

分层的镜像

为什么 Docker 镜像要采用这种分层结构呢

特点

Docker镜像commit操作补充

案例演示

1、从Hub上下载tomcat镜像到本地并成功运行

2、故意删除上一步镜像生产tomcat容器的文档

3、commit一个没有doc的tomcat新镜像

4.启动我们的新镜像并和原来的对比


是什么

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

UnionFS(联合文件系统)

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

Docker镜像加载原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。

bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载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??

分层的镜像

以我们的pull为例,在下载的过程中我们可以看到docker的镜像好像是在一层一层的在下载

为什么 Docker 镜像要采用这种分层结构呢

最大的一个好处就是 - 共享资源

比如:有多个镜像都从相同的 base 镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,

同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

特点

Docker镜像都是只读的

当容器启动时,一个新的可写层被加载到镜像的顶部。

这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。

Docker镜像commit操作补充

docker commit提交容器副本使之成为一个新的镜像

docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]

案例演示

1、从Hub上下载tomcat镜像到本地并成功运行

-p 主机端口:docker容器端口【指定端口】

docker run -it -p 8080:8080 tomcat

-P 随机分配端口

docker run -it -P tomcat

i:交互

t:终端

2、故意删除上一步镜像生产tomcat容器的文档

3、commit一个没有doc的tomcat新镜像

也即当前的tomcat运行实例是一个没有文档内容的容器,

以它为模板commit一个没有doc的tomcat新镜像heian/tomcat02

docker commit -a "wei" -m "del tomcat docs" 63982bc3e2d9 heian/mytomcat:1.2

4.启动我们的新镜像并和原来的对比

启动heian/tomcat02,它没有docs

docker run -it -p 7777:8080 heian/mytomcat:1.2 

新启动原来的tomcat,它有docs

最新文章

  1. 虚拟机备份克隆导致SQL SERVER 出现IO错误案例
  2. py2exe使用方法
  3. 《IT蓝豹》PlayNewsStandDemo资讯类新闻客户端框架
  4. python 定义类方法
  5. android开发中系统自带语音模块的使用
  6. OSSEC配置文件ossec.conf中添加mysql服务
  7. 请求管道与IHttpModule接口
  8. Netty实现高性能RPC服务器
  9. 宿舍局域网与Internet连接
  10. ISO3834认证所需的部分标准
  11. Spring测试
  12. springmvc的jdbcTemplate 插入 返回主键
  13. QGis(三)查询矢量图层的要素属性字段值(转载)
  14. DedeCMS首页调用缩略图为背景
  15. 验证码程序Demo
  16. 痞子衡嵌入式:ARM Cortex-M文件那些事(7)- 反汇编文件(.s/.lst/.dump)
  17. dom解析xml随笔
  18. C# 交集、差集、并集、去重
  19. Internet Explorer 10 administration IE10管理
  20. <转>jmeter(五)JDBC Request

热门文章

  1. 利用Fiddler对Jmeter的请求进行抓包
  2. SpringBoot2 配置多数据源,整合MybatisPlus增强插件
  3. java后台树形结构展示---懒加载
  4. jQuery随笔记录
  5. Logo(图片)作为报表水印的解决方法
  6. html中的a标签详解
  7. mssql sqlserver sql对使用逗号分隔的字符串 转换为数据表的另类方法实现
  8. python模拟进程状态
  9. Fiddler之模拟响应、修改请求或响应数据(断点)
  10. java之this关键字和super关键字的区别