005_镜像分层
2017-06-19 12:01
330 查看
镜像分层
Docker支持通过扩展现有镜像,创建新的镜像;实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件创建出来的;
下面用一个实例来说明:
Dockerfile 如下: (注:执行命令把交互都考虑进去,否则容器会创建失败,如下面的 yum -y install
)
从上边的 Dockerfile 可以看出,新镜像是从 base 镜像 之上叠加生成的,每执行一个 yum 就在现有的基础上增加一层;
采用分层结构的最大好处就是
共享资源
eg: 有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需要在磁盘上保存一份 base 镜像;同时内存中也只需要加载一份 base 镜像,就可以为所有的容器服务了,而且镜像的每一层都可以被共享;
多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,其他容器的相同文件是不会被修改的,修改会被限制在单个容器内(这里看不懂没关系,请继续往下看);
可写的容器层
当容器启动时,一个新的
可写层 会被加载到镜像的顶部,这一层叫做 “容器层” ; 容器层 之下的都叫 “镜像层”;如下图所示:
所有对容器的修改,都只会发生在容器层中;只有容器层是可写的,容器层下的所有的镜像都是只读的;
深入讨论容器层的细节
镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。如果不同层中有一个相同路径的文件,比如 /test,上层的 /test 会覆盖下层的 /test,也就是说用户只能访问到上层中的文件 /test。在容器层中,用户看到的是一个叠加之后的文件系统。
1.添加文件
在容器中创建文件时,新文件被添加到容器层中。
2.读取文件
在容器中读取某个文件时,Docker 会 从上往下
依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层, 然后打开并读入内存。
3.修改文件
在容器中修改已存在的文件时,Docker 会 从上往下
依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。
4.删除文件
在容器中删除文件时,Docker 也是 从上往下 依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作。
只有需要修改时才复制一份数据,这种特性被称作 Copy-on-Write。可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。所以容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享
Docker支持通过扩展现有镜像,创建新的镜像;实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件创建出来的;
下面用一个实例来说明:
Dockerfile 如下: (注:执行命令把交互都考虑进去,否则容器会创建失败,如下面的 yum -y install
)
From centos run yum -y install acpid run yum -y install httpd cmd ["/bin/bash"] |
采用分层结构的最大好处就是
共享资源
eg: 有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需要在磁盘上保存一份 base 镜像;同时内存中也只需要加载一份 base 镜像,就可以为所有的容器服务了,而且镜像的每一层都可以被共享;
多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,其他容器的相同文件是不会被修改的,修改会被限制在单个容器内(这里看不懂没关系,请继续往下看);
可写的容器层
当容器启动时,一个新的
可写层 会被加载到镜像的顶部,这一层叫做 “容器层” ; 容器层 之下的都叫 “镜像层”;如下图所示:
所有对容器的修改,都只会发生在容器层中;只有容器层是可写的,容器层下的所有的镜像都是只读的;
深入讨论容器层的细节
镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。如果不同层中有一个相同路径的文件,比如 /test,上层的 /test 会覆盖下层的 /test,也就是说用户只能访问到上层中的文件 /test。在容器层中,用户看到的是一个叠加之后的文件系统。
1.添加文件
在容器中创建文件时,新文件被添加到容器层中。
2.读取文件
在容器中读取某个文件时,Docker 会 从上往下
依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层, 然后打开并读入内存。
3.修改文件
在容器中修改已存在的文件时,Docker 会 从上往下
依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。
4.删除文件
在容器中删除文件时,Docker 也是 从上往下 依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作。
只有需要修改时才复制一份数据,这种特性被称作 Copy-on-Write。可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。所以容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享
相关文章推荐
- 镜像的分层结构 - 每天5分钟玩转容器技术(11)
- Dockerfile-镜像分层(三)
- 镜像的分层结构 - 每天5分钟玩转容器技术(11)
- 镜像的分层结构 - 每天5分钟玩转容器技术(11)
- docker学习系列(三):docker镜像的分层结构
- 镜像的分层结构 - 每天5分钟玩转容器技术(11)
- 005-搭建私有仓库,上传镜像报错:server gave HTTP response to HTTPS client
- 浅析Docker镜像分层的注意事项
- Docker中的镜像分层技术详解
- 镜像的分层结构 - 每天5分钟玩转容器技术(11)
- 二叉查找树的分层遍历输出和镜像
- 什么叫镜像分层平面化(工具 dockviz)
- (转)镜像的分层结构
- 【容器技术】Docker中的镜像分层技术详解
- 使用镜像数据库减轻报表的负载
- nginx 官方docker镜像使用教程
- [剑指offer][面试题19]二叉树的镜像
- composer更新不成功,启用国内镜像网站的配置更改办法
- [转]linux内核网络分层结构
- Dockerfile 构建nginx镜像并运行