¿Qué es .build-deps para apk add --virtual command?

140

¿Qué hay .build-depsen el siguiente comando? No puedo encontrar una explicación en los documentos de Alpine. ¿Es este un archivo que está predefinido? Se ve esto referenciado en muchos 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
gdbj
fuente
34
Tenga en cuenta que tener el del en un comando RUN separado no reducirá el tamaño de la imagen, ya que la eliminación se ejecuta en una nueva capa en el sistema de archivos.
scipilot

Respuestas:

235

Si ves la documentación

  -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

Lo que eso significa es que cuando instala paquetes, esos paquetes no se agregan a los paquetes globales. Y este cambio puede revertirse fácilmente. Entonces, si necesito gcc para compilar un programa, pero una vez que se compila el programa, ya no necesito gcc.

Puedo instalar gcc y otros paquetes necesarios en un paquete virtual y todas sus dependencias y todo se puede eliminar con este nombre de paquete virtual. A continuación se muestra un ejemplo de uso

apk add --virtual mypacks gcc vim
apk del mypacks

El siguiente comando eliminará los 18 paquetes instalados con el primer comando.

Tarun Lalwani
fuente
1
También vale la pena mencionar que es importante usar un nombre único para un paquete virtual, que no existe en los repositorios configurados actualmente, de lo contrario, la instalación de paquetes se realiza correctamente pero no instala lo que necesita.
bazeusz
1
Nota: debe ejecutarlo en un comando RUN, de lo contrario no se puede eliminar de la capa de imagen de Docker anterior stackoverflow.com/a/49714913/1577357
Zulhilmi Zainudin