182

.build-deps下面的命令是什么?我在 Alpine 文档中找不到解释。这是预定义的文件吗?在许多 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
4

2 回答 2

304

如果你看到文档

-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命令执行(如上所示),否则不会减小图像大小。

于 2017-09-14T14:43:17.270 回答
10

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

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

它的主要目的是让你的形象尽可能的精简和轻盈,因为一旦使用了这些包,你就可以轻松地摆脱它。

RUN请记住,如果要实现轻量级的主要目的,则应将其包含在内。

于 2021-01-14T00:05:15.107 回答