什么是.build-deps for apk add --virtual command?

gdb*_*dbj 96 apk docker dockerfile alpine-linux

什么是.build-deps在下面的命令?我无法在Alpine文档中找到解释.这是一个预定义的文件吗?在许多Dockerfiles中都会看到这个引用.

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
Run Code Online (Sandbox Code Playgroud)

Tar*_*ani 172

如果你看到文档

  -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
Run Code Online (Sandbox Code Playgroud)

这意味着当您安装软件包时,这些软件包不会添加到全局软件包中.这种变化可以很容易地恢复.所以,如果我需要gcc来编译程序,但是一旦程序被编译,我就不再需要gcc了.

我可以在虚拟包中安装gcc和其他必需的软件包,并且可以删除所有依赖项和所有内容的虚拟软件包名称.以下是一个示例用法

apk add --virtual mypacks gcc vim
apk del mypacks
Run Code Online (Sandbox Code Playgroud)

下一个命令将删除使用第一个命令安装的所有18个软件包.

  • 注意:必须在一个RUN命令中执行,否则无法从之前的Docker镜像层中删除/sf/answers/3480043941/ (10认同)
  • 另外值得一提的是,为虚拟包使用唯一的名称非常重要,该名称不存在于当前配置的存储库中,否则安装包会成功,但不会安装您需要的内容。 (2认同)

Ric*_*pie 5

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

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

它的主要目的是使您的图像尽可能简洁明了,因为一旦使用了这些包,您就可以轻松摆脱它。

请记住,RUN如果要达到轻量级的主要目的,应该将其包含在内。