Co to jest .build-deps dla apk add --virtual command?

152

Co znajduje się .build-depsw następującym poleceniu? Nie mogę znaleźć wyjaśnienia w dokumentacji Alpine. Czy to jest wstępnie zdefiniowany plik? Widać to w wielu plikach 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
źródło
37
Zauważ, że posiadanie del w osobnym poleceniu RUN nie zmniejszy rozmiaru obrazu, ponieważ usuwanie jest uruchamiane w nowej warstwie w systemie plików.
scipilot

Odpowiedzi:

250

Jeśli zobaczysz dokumentację

  -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

Oznacza to, że podczas instalowania pakietów pakiety te nie są dodawane do pakietów globalnych. I tę zmianę można łatwo cofnąć. Więc jeśli potrzebuję gcc do skompilowania programu, ale po skompilowaniu programu nie potrzebuję już gcc.

Mogę zainstalować gcc i inne wymagane pakiety w pakiecie wirtualnym i wszystkie jego zależności i wszystko można usunąć z tej nazwy pakietu wirtualnego. Poniżej znajduje się przykładowe użycie

apk add --virtual mypacks gcc vim
apk del mypacks

Kolejne polecenie usunie wszystkie 18 pakietów zainstalowanych za pomocą pierwszego polecenia.

Tarun Lalwani
źródło
1
Warto również wspomnieć, że ważne jest, aby użyć unikalnej nazwy dla pakietu wirtualnego, która nie istnieje w aktualnie skonfigurowanych repozytoriach, w przeciwnym razie instalacja pakietów powiedzie się, ale nie zainstaluje tego, czego potrzebujesz.
bazeusz
3
Uwaga: musisz wykonać to jednym poleceniem RUN, w przeciwnym razie nie można go usunąć z poprzedniej warstwy obrazu
Dockera