005_镜像分层
来源:互联网 发布:医疗软件注册证 编辑:程序博客网 时间:2024/06/06 00:27
镜像分层
Docker支持通过扩展现有镜像,创建新的镜像;实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件创建出来的;
下面用一个实例来说明:
Dockerfile 如下: (注:执行命令把交互都考虑进去,否则容器会创建失败,如下面的 yum -y install)
run yum -y install acpid
run yum -y install httpd
cmd ["/bin/bash"]
从上边的 Dockerfile 可以看出,新镜像是从 base 镜像 之上叠加生成的,每执行一个 yum 就在现有的基础上增加一层;
采用分层结构的最大好处就是共享资源
eg: 有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需要在磁盘上保存一份 base 镜像;同时内存中也只需要加载一份 base 镜像,就可以为所有的容器服务了,而且镜像的每一层都可以被共享;
多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,其他容器的相同文件是不会被修改的,修改会被限制在单个容器内(这里看不懂没关系,请继续往下看);
可写的容器层
当容器启动时,一个新的 可写层 会被加载到镜像的顶部,这一层叫做 “容器层” ; 容器层 之下的都叫 “镜像层”;如下图所示:
所有对容器的修改,都只会发生在容器层中;只有容器层是可写的,容器层下的所有的镜像都是只读的;
深入讨论容器层的细节
镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。如果不同层中有一个相同路径的文件,比如 /test,上层的 /test 会覆盖下层的 /test,也就是说用户只能访问到上层中的文件 /test。在容器层中,用户看到的是一个叠加之后的文件系统。
1.添加文件
在容器中创建文件时,新文件被添加到容器层中。
2.读取文件
在容器中读取某个文件时,Docker 会 从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层, 然后打开并读入内存。
3.修改文件
在容器中修改已存在的文件时,Docker 会 从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。
4.删除文件
在容器中删除文件时,Docker 也是 从上往下 依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作。
只有需要修改时才复制一份数据,这种特性被称作 Copy-on-Write。可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。所以容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享
阅读全文
0 0
- 005_镜像分层
- 镜像的分层结构
- Dockerfile-镜像分层(三)
- 二叉查找树的分层遍历输出和镜像
- 【容器技术】Docker中的镜像分层技术详解
- 事物_软件分层
- 20170928_二叉树的镜像
- 19_二叉树的镜像
- Linux_Hi3518E开发_制作根文件系统镜像
- 006_制作第一个Docker镜像
- U盘装系统_官方镜像
- FY工作记录20140604_系统分层
- 分层
- 分层
- 分层
- 分层
- 分层
- 分层
- 【u-boot】u-boot-2017.05启动过程分析(一)
- 使用jmeter进行APP接口测试经验总结
- 内连接、左外连接、右外连接、交叉连接区别
- mysql root登录报错问题
- Android开发:清空缓存
- 005_镜像分层
- OkHttp 3.7源码分析(一)——整体架构
- Android SDK platforms build-tools等镜像下载
- kibana 查询语法
- 调用react-native-fs插件时,如果数据的接口是需要验证信息的,在android上运行报错
- 线段树小结
- jquery遍历表格获取每行数据及每个单元格数据
- js中__proto__和prototype的区别和关系
- iOS 开发流程