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

Resuelto gdbj asked hace 7 años • 2 respuestas

¿ Qué hay .build-depsen el siguiente comando? No puedo encontrar una explicación en los documentos de Alpine. ¿Es este un archivo predefinido? Veo que se hace referencia a esto 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 avatar Sep 14 '17 20:09 gdbj
Aceptado

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 instalas paquetes, esos paquetes no se agregan a los paquetes globales. Y este cambio se puede revertir fácilmente. Entonces, si necesito gcc para compilar un programa, pero una vez que el programa está compilado, 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.

RUN apk add --virtual mypacks gcc vim \
 && apk del mypacks

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

En Docker, estos deben ejecutarse como un solo RUNcomando (como se muestra arriba); de lo contrario, no reducirá el tamaño de la imagen.

Tarun Lalwani avatar Sep 14 '2017 14:09 Tarun Lalwani

.build-depses un nombre arbitrario para llamar a un "paquete virtual" en Alpine, donde agregará paquetes.

Crea un 'mundo' extra de paquetes que necesitará durante un período de tiempo limitado (por ejemplo, compiladores para crear otras cosas).

Su objetivo principal es mantener su imagen lo más esbelta y liviana posible, porque puede deshacerse de ella fácilmente una vez que se hayan usado esos paquetes.

Recuerde que debe incluirse en el mismo RUNsi desea lograr el objetivo principal de ligereza.

RicHincapie avatar Jan 14 '2021 00:01 RicHincapie