201 votes

Qu'est-ce que .build-deps pour la commande apk add --virtual ?

Qu'est-ce que .build-deps dans la commande suivante ? Je ne trouve pas d'explication dans la documentation Alpine. S'agit-il d'un fichier prédéfini ? Je le vois référencé dans de nombreux 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

53 votes

Notez que le fait de placer la suppression dans une commande RUN distincte ne réduira pas la taille de l'image, car la suppression est exécutée dans une nouvelle couche du système de fichiers.

338voto

Tarun Lalwani Points 75641

Si vous voyez la documentation

-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

Cela signifie que lorsque vous installez des paquets, ceux-ci ne sont pas ajoutés aux paquets globaux. Et ce changement peut être facilement annulé. Ainsi, si j'ai besoin de gcc pour compiler un programme, mais qu'une fois le programme compilé, je n'ai plus besoin de gcc.

Je peux installer gcc, et d'autres paquets requis dans un paquet virtuel et toutes ses dépendances et tout peut être supprimé ce nom de paquet virtuel. Voici un exemple d'utilisation

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

La commande suivante supprimera les 18 paquets installés avec la première commande.

Dans Docker, ils doivent être exécutés en une seule fois. RUN (comme indiqué ci-dessus), sinon il ne réduira pas la taille de l'image.

2 votes

Il convient également de mentionner qu'il est important d'utiliser un nom unique pour un paquet virtuel, qui n'existe pas dans les dépôts actuellement configurés, sinon l'installation des paquets réussit mais n'installe pas ce dont vous avez besoin.

13 votes

Remarque : vous devez l'exécuter en une seule commande RUN, sinon il ne pourra pas être supprimé de la couche d'image Docker précédente. stackoverflow.com/a/49714913/1577357

19voto

RicarHincapie Points 501

.build-deps est un nom arbitraire d'appeler un "paquet virtuel" dans Alpine, où vous ajouterez des paquets.

Il crée un "monde" supplémentaire de paquets, dont vous aurez besoin pendant une période limitée (par exemple, des compilateurs pour construire d'autres choses).

Son objectif principal est pour que votre image soit la plus légère possible, car vous pourrez facilement vous en débarrasser une fois que ces paquets auront été utilisés.

N'oubliez pas qu'elle doit être incluse dans le même document. RUN si vous voulez atteindre l'objectif principal du poids léger.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X