Che cos'è .build-deps per apk add - comando virtuale?


140

Cosa c'è .build-depsnel seguente comando? Non riesco a trovare una spiegazione nei documenti alpini. È un file predefinito? Si vede questo referenziato in molti 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

34
Nota, avere il del in un comando RUN separato non ridurrà la dimensione dell'immagine, poiché l'eliminazione viene eseguita in un nuovo livello nel filesystem.
scipilot,

Risposte:


235

Se vedi la documentazione

  -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

Ciò significa che quando si installano i pacchetti, tali pacchetti non vengono aggiunti ai pacchetti globali. E questo cambiamento può essere facilmente ripristinato. Quindi se ho bisogno di gcc per compilare un programma, ma una volta compilato il programma non ho più bisogno di gcc.

Posso installare gcc e altri pacchetti richiesti in un pacchetto virtuale e tutte le sue dipendenze e tutto può essere rimosso con questo nome di pacchetto virtuale. Di seguito è riportato un esempio di utilizzo

apk add --virtual mypacks gcc vim
apk del mypacks

Il comando successivo eliminerà tutti i 18 pacchetti installati con il primo comando.


1
Vale anche la pena ricordare che è importante utilizzare un nome univoco per un pacchetto virtuale, non esistente nei repository attualmente configurati, altrimenti l'installazione dei pacchetti ha esito positivo ma non installa ciò di cui hai bisogno.
bazeusz,

1
Nota: è necessario eseguire in un solo comando RUN, altrimenti non può essere eliminato dal precedente Docker livello dell'immagine stackoverflow.com/a/49714913/1577357
Zulhilmi Zainudin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.