docker 的图像层有什么好处?
What's benefit of docker's image layer?
我是 Docker 的新手。基于阅读一些 Docker 文档,我计划将我的项目转换为 Docker 图像,如下设计:
我的项目有以下性质:
- 基础 OS almost 永远不需要更新,除非有大 OS 问题,因此说基础 OS 每 2 年更新一次。
- 基础库可能只更新 6 个月。
- 库每月更新一次。
- 项目代码每天更新一次。
因此我打算制作4张图片:
- image1 - 基础 os
- image2 - 来自 image1 并添加基础库
- image3 - 来自 image2 并添加库
- image4 - 来自 image3 并添加项目代码
我的理解是,image4有4层。一旦我构建了一个新的 image4,Docker 只需要拉取 layer4,因为 layer 1,2,3 与旧的 image4 相同。由于我的项目代码只是一些文本脚本,因此layer4应该很小,因此拉一个新的image4应该很快。
我的理解正确吗?
Since my project code is just some text scripts, thus layer4 should be very small
Layer4会很小,但是拉取image4会很快,前提是之前已经拉取过image 1到3。
并且生成的 image4 不会很小,而是 3 个基本图像拼接的结果。
此外,术语 "layer" 不应掩盖这样一个事实,即 docker 文件中的每一行都将创建一个中间图像,使实际图像成为所有这些中间小层的集合(由此产生来自每个 Dockerfile 命令的执行)。
你可能有 4 "general" 层,但实际图像很可能由超过 4 层组成。
您可以使用 imagelayers.io
检查
我使用 alias to cleanup old dangling images:
alias drmiad='docker rmi $(docker images --filter "dangling=true" -q --no-trunc)'
我的build script通常包括:
. ../.bash_aliases
docker build -t sshd . || exit 1
drmiad 2> /dev/null
我是 Docker 的新手。基于阅读一些 Docker 文档,我计划将我的项目转换为 Docker 图像,如下设计:
我的项目有以下性质:
- 基础 OS almost 永远不需要更新,除非有大 OS 问题,因此说基础 OS 每 2 年更新一次。
- 基础库可能只更新 6 个月。
- 库每月更新一次。
- 项目代码每天更新一次。
因此我打算制作4张图片:
- image1 - 基础 os
- image2 - 来自 image1 并添加基础库
- image3 - 来自 image2 并添加库
- image4 - 来自 image3 并添加项目代码
我的理解是,image4有4层。一旦我构建了一个新的 image4,Docker 只需要拉取 layer4,因为 layer 1,2,3 与旧的 image4 相同。由于我的项目代码只是一些文本脚本,因此layer4应该很小,因此拉一个新的image4应该很快。
我的理解正确吗?
Since my project code is just some text scripts, thus layer4 should be very small
Layer4会很小,但是拉取image4会很快,前提是之前已经拉取过image 1到3。
并且生成的 image4 不会很小,而是 3 个基本图像拼接的结果。
此外,术语 "layer" 不应掩盖这样一个事实,即 docker 文件中的每一行都将创建一个中间图像,使实际图像成为所有这些中间小层的集合(由此产生来自每个 Dockerfile 命令的执行)。
你可能有 4 "general" 层,但实际图像很可能由超过 4 层组成。
您可以使用 imagelayers.io
我使用 alias to cleanup old dangling images:
alias drmiad='docker rmi $(docker images --filter "dangling=true" -q --no-trunc)'
我的build script通常包括:
. ../.bash_aliases
docker build -t sshd . || exit 1
drmiad 2> /dev/null