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
COPY [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).<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
FROM nginx:alpine
COPY 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 Diretório
FROM python:3.10
COPY ./src /app/srcAqui, 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
FROM node:14
COPY *.js /usr/src/app/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
COPYsuporta padrões glob, permitindo que você selecione múltiplos arquivos usando curingas, como*.txtou**/*.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çõesRUNseguintes serão invalidadas, forçando uma nova execução. Por isso, é recomendado colocar oCOPYlogo 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 ADDEmbora 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
.dockerignorepara excluir arquivos que não devem ser incluídos na imagem.Prefira
COPYaADDa menos que você precise das funcionalidades adicionais deADD.
Laboratório
Last updated