什么是apk add虚拟命令的.build-deps ?

下面命令中的.build-deps是什么?我在阿尔卑斯山的文件里找不到解释。这是预定义的文件吗?在很多dockerfile中都有引用。

RUN apk add --no-cache --virtual .build-deps \
gcc \
freetype-dev \
musl-dev


RUN pip install --no-cache-dir <packages_that_require_gcc...> \


RUN apk del .build-deps
74634 次浏览

如果你看了文档

-t, --virtual NAME    Instead of adding all the packages to 'world', create a new
virtual package with the listed dependencies and add that
to 'world'; the actions of the command are easily reverted
by deleting the virtual package

这意味着当您安装包时,这些包不会添加到全局包中。而且这种变化可以很容易地恢复。因此,如果我需要gcc来编译一个程序,但一旦程序编译完毕,我就不再需要gcc了。

我可以在一个虚拟包中安装gcc和其他所需的包,它的所有依赖项和所有东西都可以删除这个虚拟包名称。下面是一个示例用法

RUN apk add --virtual mypacks gcc vim \
&& apk del mypacks

下一个命令将删除与第一个命令一起安装的所有18个包。

在docker中,这些必须作为一个RUN命令执行(如上所示),否则它不会减小图像大小。

.build-deps是一个调用“虚拟包”的任意的名称。在Alpine中,您将在其中添加包。

它创建了一个额外的包的“世界”,你将需要一段有限的时间(例如编译器构建其他东西)。

它的主要目的是来保持你的形象尽可能瘦和轻,因为你可以很容易地摆脱它一旦这些包被使用。

请记住,如果你想实现轻量级的主要目的,它应该包含在相同的RUN中。