COPY
A instrução COPY
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. É uma das formas mais comuns de adicionar conteúdo ao contêiner, como código-fonte, configurações, e outros arquivos necessários para a aplicação.
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
).<destino>
: Especifica o caminho no contêiner onde o conteúdo será copiado. Esse caminho pode ser um diretório existente ou um novo diretório que será criado automaticamente.
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 Diretório
Aqui, todo o conteúdo do diretório src
no sistema local é copiado para /app/src
dentro do contêiner. Se /app/src
não existir, ele será criado.
Copiar com Padrão Glob
Neste exemplo, todos os arquivos .js
no diretório atual (onde o Dockerfile está localizado) são copiados para o diretório /usr/src/app/
no contêiner.
Copiar Arquivos com Especificação de Usuário e Grupo
Aqui, o diretório myapp
é copiado para /home/user/myapp
no contêiner, e a propriedade dos arquivos é atribuída ao usuário e grupo com ID 1001
.
Opções
--chown=<user>:<group>
: Permite definir o usuário e grupo proprietários dos arquivos copiados. Isso é útil para garantir que os arquivos tenham as permissões corretas no contêiner.
Considerações Importantes
Padrões Glob: O
COPY
suporta padrões glob, permitindo que você selecione múltiplos arquivos usando curingas, como*.txt
ou**/*.js
.Diretórios e Arquivos Ocultos: Quando você copia um diretório, todos os arquivos e subdiretórios, incluindo arquivos ocultos (os que começam com
.
), serão copiados, a menos que você exclua explicitamente esses arquivos com.dockerignore
.Ordem de
COPY
: O Docker otimiza a construção das imagens através de um sistema de cache. Se o conteúdo copiado mudar, as instruçõesRUN
seguintes serão invalidadas, forçando uma nova execução. Por isso, é recomendado colocar oCOPY
logo antes dos comandos que precisam dos arquivos copiados, para que o cache seja eficiente.
Exemplos Avançados
Usando .dockerignore
Às vezes, você pode querer excluir determinados arquivos ou diretórios ao usar o COPY
. Isso pode ser feito com o arquivo .dockerignore
.
Estrutura do Projeto:
.dockerignore:
Dockerfile:
Nesse caso, o arquivo secret.txt
será ignorado durante a cópia, mesmo que esteja dentro do diretório src
.
Diferença entre COPY
e ADD
COPY
e ADD
Embora COPY
e ADD
possam parecer semelhantes, eles têm diferenças importantes:
COPY
: É mais simples e recomendado para a maioria das situações. Ele apenas copia arquivos do host para o contêiner.ADD
: Oferece funcionalidades adicionais, como a capacidade de descompactar arquivos tar ou baixar arquivos de URLs remotas, mas deve ser usado com cautela devido a possíveis problemas de segurança e imprevisibilidade.
Resumo
COPY
é ideal para copiar arquivos e diretórios do sistema de arquivos local para o contêiner.Use padrões glob para copiar múltiplos arquivos de forma eficiente.
Utilize
.dockerignore
para excluir arquivos que não devem ser incluídos na imagem.Prefira
COPY
aADD
a menos que você precise das funcionalidades adicionais deADD
.
Laboratório
Last updated