Ao criar um Dockerfile, existem dois comandos que você pode usar para copiar arquivos / diretórios nele - ADD
e COPY
. Embora haja pequenas diferenças no escopo de sua função, eles executam essencialmente a mesma tarefa.
Então, por que temos dois comandos e como sabemos quando usar um ou outro?
DOCKER ADD
COMMAND
Vamos começar observando que o ADD
comando é anterior a COPY
. Desde o lançamento da plataforma Docker, a ADD
instrução faz parte de sua lista de comandos.
O comando copia arquivos / diretórios para um sistema de arquivos do contêiner especificado.
A sintaxe básica para o ADD
comando é:
ADD <src> … <dest>
Inclui a fonte que você deseja copiar ( <src>
) seguida do destino onde deseja armazená-la ( <dest>
). Se a origem for um diretório, ADD
copie tudo dentro dele (incluindo os metadados do sistema de arquivos).
Por exemplo, se o arquivo estiver disponível localmente e você desejar adicioná-lo ao diretório de uma imagem, digite:
ADD /source/file/path /destination/path
ADD
também pode copiar arquivos de um URL. Ele pode baixar um arquivo externo e copiá-lo para o destino desejado. Por exemplo:
ADD http://source.file/url /destination/path
Um recurso adicional é que ele copia arquivos compactados, extraindo automaticamente o conteúdo no destino especificado. Esse recurso se aplica apenas a arquivos / diretórios compactados armazenados localmente.
ADD source.file.tar.gz /temp
Lembre-se de que não é possível baixar e extrair um arquivo / diretório compactado de um URL. O comando não descompacta pacotes externos ao copiá-los para o sistema de arquivos local.
DOCKER COPY
COMMAND
Devido a alguns problemas de funcionalidade, o Docker teve que introduzir um comando adicional para duplicar o conteúdo - COPY
.
Ao contrário de seu ADD
comando estreitamente relacionado , COPY
possui apenas uma função atribuída. Sua função é duplicar arquivos / diretórios em um local especificado em seu formato existente. Isso significa que ele não lida com a extração de um arquivo compactado, mas o copia como está.
A instrução pode ser usada apenas para arquivos armazenados localmente. Portanto, você não pode usá-lo com URLs para copiar arquivos externos para seu contêiner.
Para usar a COPY
instrução, siga o formato de comando básico:
Digite a fonte e onde deseja que o comando extraia o conteúdo da seguinte maneira:
COPY <src> … <dest>
Por exemplo:
COPY /source/file/path /destination/path
Qual comando usar (prática recomendada)
Considerando as circunstâncias em que o COPY
comando foi introduzido, é evidente que manter ADD
era uma questão de necessidade. O Docker lançou um documento oficial descrevendo as práticas recomendadas para a criação de arquivos Docker, que desaconselha explicitamente o uso do ADD
comando.
A documentação oficial do Docker observa que COPY
sempre deve ser a instrução go-to, pois é mais transparente que ADD
.
Se você precisar copiar do contexto de construção local para um contêiner, continue usando COPY
.
A equipe do Docker também desencoraja fortemente o uso ADD
para baixar e copiar um pacote de um URL. Em vez disso, é mais seguro e eficiente usar o wget ou curl dentro de um RUN
comando. Ao fazer isso, você evita criar uma camada de imagem adicional e economiza espaço.