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

  • Descompactaçã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 ADD pode 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 ADD para 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 com COPY.

  • Descompressão Automática: Embora a descompressão automática possa ser conveniente, ela pode resultar em comportamentos inesperados. Utilize ADD para essa função somente se tiver certeza do conteúdo e do formato do arquivo.

  • Ordem de ADD: Assim como COPY, o ADD utiliza 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 de ADD (como descompressão ou download de arquivos), prefira COPY, 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

  • COPY: 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

  • Descompactação de Arquivos: Use ADD se precisar descompactar um arquivo tar, gzip, ou outro formato suportado durante a cópia.

  • Download de Arquivos Remotos: Embora possível, usar ADD para baixar arquivos de URLs remotas não é uma prática recomendada. Prefira o uso de ferramentas como curl ou wget em um comando RUN para esse propósito.

Resumo

  • ADD oferece mais funcionalidades que COPY, mas deve ser usado com cautela.

  • Prefira COPY quando possível, e use ADD apenas 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