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


139

什么是.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

34
注意,将del放在单独的RUN命令中不会减小映像大小,因为删除操作是在文件系统的新层中运行的。
scipilot

Answers:


234

如果您看到说明文件

  -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和其他必需的软件包,并且可以删除该虚拟软件包名称中的所有内容。以下是用法示例

apk add --virtual mypacks gcc vim
apk del mypacks

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


1
还值得一提的是,对虚拟软件包使用唯一的名称(在当前配置的存储库中不存在)是很重要的,否则,安装软件包会成功,但不会安装您需要的软件包。
bazeusz

1
注意:您必须在一个RUN命令中执行它,否则不能从以前的Docker映像层中删除它stackoverflow.com/a/49714913/1577357
Zulhilmi Zainudin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.