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
<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
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
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
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 comCOPY
.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 comoCOPY
, oADD
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 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 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
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 comocurl
ouwget
em um comandoRUN
para esse propósito.
Resumo
ADD
oferece mais funcionalidades queCOPY
, mas deve ser usado com cautela.Prefira
COPY
quando possível, e useADD
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