O que é o .build-deps para apk add --virtual command?

139

O que está .build-depsno seguinte comando? Não consigo encontrar uma explicação nos documentos da Alpine. Esse arquivo é predefinido? É ver isso referenciado em muitos arquivos de encaixe.

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
fonte
34
Observe que a exclusão de um comando RUN separado não reduzirá o tamanho da imagem, pois a exclusão é executada em uma nova camada no sistema de arquivos.
Scipilot

Respostas:

234

Se você vir a documentação

  -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

O que isso significa é que, quando você instala pacotes, esses pacotes não são adicionados aos pacotes globais. E essa mudança pode ser facilmente revertida. Portanto, se eu precisar do gcc para compilar um programa, mas depois que o programa for compilado, não preciso mais do gcc.

Eu posso instalar o gcc e outros pacotes necessários em um pacote virtual e todas as suas dependências e tudo pode ser removido desse nome de pacote virtual. Abaixo está um exemplo de uso

apk add --virtual mypacks gcc vim
apk del mypacks

O próximo comando excluirá todos os 18 pacotes instalados com o primeiro comando.

Tarun Lalwani
fonte
1
Também é importante mencionar que é importante usar um nome exclusivo para um pacote virtual, que não existe nos repositórios configurados atualmente; caso contrário, a instalação de pacotes é bem-sucedida, mas não instala o que você precisa.
bazeusz 17/03
1
Nota: você deve executá-lo em um comando RUN, caso contrário não poderá ser excluído da camada de imagem anterior do Docker stackoverflow.com/a/49714913/1577357
Zulhilmi Zainudin