.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
.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
如果你看到文档
-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
请记住,如果要实现轻量级的主要目的,则应将其包含在内。