是否可以生成比基本图像小得多的泊坞窗图像? 场景是我使用的基本图像选项有限,而且它们是大型通用图像。
e.g。如果我的基本图像大小是100 MB,我可以从这个基本图像创建一个图像,并通过删除不必要的包仍然有更小的图像? 我尝试了它,并且能够在图像构建期间成功删除包,但没有看到图像大小的变化。
这听起来与我对Docker的了解相反。但仍想与社区和专家核实。
答案 0 :(得分:1)
您没有看到图像尺寸发生变化的原因:
Docker依赖于分层文件系统。分层文件系统的一个有趣特性是较低层不可变为上层。删除某些文件时,您将在整个图层堆栈的顶部创建一个新图层。这些文件在新图层中不可见,但仍然存在于较低图层。
实现精益形象的一种方法:
使用Docker的多阶段构建。在小型基础图像上构建自己的图像,并使用COPY --from=large-image files files
指令从大图像中复制必要的文件。
更新:还有另一种(棘手的)方法可以从大图像中生成较小的图像。
可以压扁容器。
假设您已构建名为myimage
的图像。现在从中运行一个容器,并记下容器的id。
运行以下命令以生成新图像:
docker export <id> | docker import - myimage-new
此myimage-new
的尺寸小于原始图像。但当然它不再包含任何构建历史记录(可以由docker history
引用)。