apk add --virtual 命令的 .build-deps 是啥?

Posted

技术标签:

【中文标题】apk add --virtual 命令的 .build-deps 是啥?【英文标题】:What is .build-deps for apk add --virtual command?apk add --virtual 命令的 .build-deps 是什么? 【发布时间】:2018-02-23 13:17:09 【问题描述】:

以下命令中的.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

【问题讨论】:

注意,在单独的 RUN 命令中使用 del 不会减小图像大小,因为删除是在文件系统的新层中运行的。 【参考方案1】:

如果你看到文档

  -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 个包。

【讨论】:

另外值得一提的是,为虚拟包使用唯一名称很重要,该名称在当前配置的存储库中不存在,否则安装包会成功但不会安装您需要的东西。 注意:必须在一个RUN命令中执行,否则无法从之前的Docker镜像层删除***.com/a/49714913/1577357【参考方案2】:

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

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

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

如果你想达到轻量级的主要目的,请记住它应该包含在同一个RUN中。

【讨论】:

以上是关于apk add --virtual 命令的 .build-deps 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

markdown add-new-virtual-host.md

Alpine Linux 的“--update add”命令说明

alpine切换源 安装慢 apk add很慢

Android性能优化系列之apk瘦身

APK包名和launcherActivity取法

gradle assemble productflavor android