ADD
A instrução ADD em um Dockerfile é utilizada para copiar arquivos e diretórios do sistema de arquivos local (host) para o sistema de arquivos do contêiner durante a construção da imagem. Ela é semelhante à instrução COPY, mas oferece funcionalidades adicionais, como a capacidade de descompactar arquivos automaticamente e de baixar arquivos de URLs remotas.
Sintaxe Básica
ADD [opções] <origem>... <destino><origem>: Especifica o caminho do arquivo ou diretório no sistema de arquivos local que será copiado. Pode incluir arquivos específicos ou usar padrões glob (como*.txt). Se<origem>for uma URL, o conteúdo será baixado e colocado no<destino>.<destino>: Especifica o caminho no contêiner onde o conteúdo será copiado ou descompactado. Esse caminho pode ser um diretório existente ou um novo diretório que será criado automaticamente.
Funcionalidades Adicionais do ADD
ADDDescompactação Automática: Se o arquivo de origem for um arquivo comprimido no formato
.tar,.gz,.bz2,.xz,.zip, ele será automaticamente descompactado no destino.Download de URLs: O
ADDpode baixar arquivos de URLs remotas e colocá-los no contêiner. No entanto, esta prática não é recomendada devido a potenciais problemas de segurança e previsibilidade.
Exemplos de Uso
Copiar Arquivo Simples
FROM nginx:alpine
ADD index.html /usr/share/nginx/html/Neste exemplo, o arquivo index.html do sistema de arquivos local é copiado para o diretório /usr/share/nginx/html/ no contêiner.
Copiar e Descompactar Arquivo
FROM busybox
ADD files.tar.gz /usr/src/app/Aqui, o arquivo files.tar.gz é descompactado no diretório /usr/src/app/ dentro do contêiner. Se files.tar.gz contiver vários arquivos e diretórios, eles serão extraídos para /usr/src/app/.
Baixar Arquivo de URL
Neste exemplo, o arquivo file.txt é baixado da URL https://example.com/file.txt e colocado no diretório /root/ dentro do contêiner.
Considerações e Boas Práticas
Segurança: Evite usar
ADDpara baixar arquivos de URLs externas, pois isso pode introduzir vulnerabilidades ou tornar a construção da imagem imprevisível devido a mudanças no conteúdo remoto. Em vez disso, prefira baixar arquivos manualmente e incluí-los comCOPY.Descompressão Automática: Embora a descompressão automática possa ser conveniente, ela pode resultar em comportamentos inesperados. Utilize
ADDpara essa função somente se tiver certeza do conteúdo e do formato do arquivo.Ordem de
ADD: Assim comoCOPY, oADDutiliza cache para otimizar a construção das imagens. Mudar o conteúdo copiado ou baixado pode invalidar o cache, forçando a reexecução das instruções subsequentes.Preferir
COPY: Se você não precisar das funcionalidades extras deADD(como descompressão ou download de arquivos), prefiraCOPY, que é mais simples e explícito em seu propósito.
Exemplos Avançados
Usando .dockerignore com ADD
Assim como com COPY, você pode usar um arquivo .dockerignore para excluir determinados arquivos ou diretórios ao usar ADD.
Estrutura do Projeto:
.dockerignore:
Dockerfile:
Neste caso, o arquivo secret.txt será ignorado durante a operação de ADD, mesmo que esteja dentro do diretório data.
Diferença entre ADD e COPY
ADD e COPYCOPY: Usa-se para copiar arquivos ou diretórios locais para o contêiner. Simples e direto, sem nenhuma funcionalidade adicional.ADD: Pode copiar arquivos locais, descompactar arquivos automaticamente e baixar arquivos de URLs remotas.
Quando Usar ADD
ADDDescompactação de Arquivos: Use
ADDse precisar descompactar um arquivo tar, gzip, ou outro formato suportado durante a cópia.Download de Arquivos Remotos: Embora possível, usar
ADDpara baixar arquivos de URLs remotas não é uma prática recomendada. Prefira o uso de ferramentas comocurlouwgetem um comandoRUNpara esse propósito.
Resumo
ADDoferece mais funcionalidades queCOPY, mas deve ser usado com cautela.Prefira
COPYquando possível, e useADDapenas quando precisar de suas funcionalidades extras, como descompressão automática ou downloads de URLs.Tenha atenção à segurança e previsibilidade ao usar
ADD.
Laboratório
Url
Não faz uso de cache
Arquivo compactado
Boa prática: preferir o COPY ao ADD a não ser que seja necessário trabalhar com arquivo remoto ou compactado
Last updated