从大型基础图像生成精益图像

时间:2018-03-31 22:00:14

标签: docker

是否可以生成比基本图像小得多的泊坞窗图像? 场景是我使用的基本图像选项有限,而且它们是大型通用图像。

e.g。如果我的基本图像大小是100 MB,我可以从这个基本图像创建一个图像,并通过删除不必要的包仍然有更小的图像? 我尝试了它,并且能够在图像构建期间成功删除包,但没有看到图像大小的变化。

这听起来与我对Docker的了解相反。但仍想与社区和专家核实。

1 个答案:

答案 0 :(得分:1)

您没有看到图像尺寸发生变化的原因:

Docker依赖于分层文件系统。分层文件系统的一个有趣特性是较低层不可变为上层。删除某些文件时,您将在整个图层堆栈的顶部创建一个新图层。这些文件在新图层中不可见,但仍然存在于较低图层

实现精益形象的一种方法:

使用Docker的多阶段构建。在小型基础图像上构建自己的图像,并使用COPY --from=large-image files files指令从大图像中复制必要的文件。

更新:还有另一种(棘手的)方法可以从大图像中生成较小的图像。

可以压扁容器。

假设您已构建名为myimage的图像。现在从中运行一个容器,并记下容器的id。

运行以下命令以生成新图像:

docker export <id> | docker import - myimage-new

myimage-new的尺寸小于原始图像。但当然它不再包含任何构建历史记录(可以由docker history引用)。