Como usar o Docker CP para copiar arquivos entre hosts e contêineres

Precisa enviar ou puxar alguns arquivos de um contêiner do Docker? O comando docker cp permite que você copie entre sistemas de arquivos host e contêiner para que você possa adicionar detalhes de configuração, criar backups e restaurar dados existentes.

índice

  1. sintaxe básica
  2. Copie diretórios inteiros
  3. comportamento de cópia
  4. Limitações de comando
  5. Usando Bind Mount para Copiar Arquivos
  6. O que dizer COPY em Dockerfiles?
  7. Quando copiar arquivos com o Docker?
  8. Resumo

sintaxe básica

docker cp aceita os caminhos de origem e destino como seus dois argumentos:

 docker cp example.txt my-container:/example.txt

Aqui example.txt é copiado do seu diretório de trabalho para /example.txt no my-container container. Você pode reverter os dois argumentos para copiar /example.txt para fora do contêiner e para seu diretório de trabalho.

O argumento que se refere ao caminho do contêiner deve ser precedido por um ID ou nome de contêiner seguido por dois pontos ( : ). Você pode encontrar o ID ou o nome de um contêiner em execução com docker ps .

Cada comando docker cp requer um caminho de sistema de arquivos local e um caminho de contêiner; você não pode copiar diretamente entre dois contêineres. Use um procedimento de várias etapas se precisar fazer isso, copiando primeiro do contêiner de origem para o sistema de arquivos e, em seguida, do novo caminho local para o contêiner de destino.

Copie diretórios inteiros

docker cp também pode copiar diretórios recursivamente:

 docker cp /home/demo/website apache-container:/var/www/html/.

Docker copie tudo para /home/demo/website e transfira para /var/www/html .

comportamento de cópia

Quando você copia um arquivo, o Docker cria um novo arquivo no destino, caso ainda não exista. Os arquivos existentes são substituídos pelo novo conteúdo. Quando o destino é um diretório, o arquivo é copiado para ele com o nome do arquivo de origem. Uma exceção é quando o destino especificado termina com um / , indicando um diretório, mas o caminho ainda não existe. Um erro será gerado neste cenário.

O processo é um pouco mais complicado para cópias de diretório. Um novo diretório será criado no destino com o conteúdo do diretório de origem, se o caminho de destino ainda não existir. Quando existe, o comportamento varia dependendo se incluiu ou não um final. /. componente no caminho.

  • /. is present – O diretório de origem é copiado para o diretório de destino existente.
  • /. não presente – O conteúdo do diretório de origem é copiado para o destino.

A distinção fina determina se um novo subdiretório é criado no destino.

Limitações de comando

Apesar do nome, docker cp não é uma implementação completa do comando cp shell. Os sinalizadores cp não são suportados, exceto -a e -L :

  • -a – Modo de arquivo, que mantém os detalhes do usuário e do grupo em arquivos copiados.
  • -L – Siga links simbólicos no diretório de origem para copiar o conteúdo dos destinos do link, em vez dos próprios links.

Para casos de uso mais avançados em que a cópia seletiva é necessária, você precisará usar uma abordagem diferente.

Usando Bind Mount para Copiar Arquivos

Os volumes do Docker fornecem outra maneira de mover arquivos entre contêineres e seu host. Vincular uma montagem de diretório local em um contêiner permite acessar seu conteúdo do sistema de arquivos do host, eliminando a necessidade de usar o docker cp .

 docker run -v /example/host/directory:/container/path my-image:latest

O conteúdo do caminho /example/host/directory é montado no sistema de arquivos do contêiner em /container/path . Você pode interagir com esses arquivos fora do Docker usando ferramentas familiares como cp , rsync e seu navegador de arquivos gráficos.

Essa técnica só é útil ao trabalhar com um único diretório de contenção. Não funciona bem ao copiar de locais arbitrários, pois você precisa conhecer os caminhos a serem usados ​​de antemão quando o contêiner é criado.

Você também deve ter cuidado com as permissões do sistema de arquivos: os arquivos criados dentro do contêiner geralmente serão de propriedade do root . Isso pode criar situações embaraçosas no host em que os arquivos no diretório associado não podem ser modificados ou excluídos. Use o comando chown no host e dentro do container para alterar a propriedade dependendo do ambiente, se necessário.

O que dizer COPY em Dockerfiles?

O docker cp às vezes pode ser confundido com as instruções COPY no Dockerfile. É importante reconhecer que esses dois recursos atendem a casos de uso muito diferentes.

COPY não pode ser usado para mover arquivos entre o host e um contêiner em execução. É usado para fazer upload de arquivos. Imagens durante o processo de construção:

 COPIE /home/me/meu-site /var/www/html/.

Aqui, o código-fonte do site é copiado para uma imagem como parte de uma compilação. Este é um processo único. Qualquer contêiner iniciado pela imagem incluiria a origem do site como estava em tempo de execução. docker build .

docker cp permite que você substitua esse código-fonte por uma versão mais recente assim que um contêiner estiver em execução. As instruções COPY são para tornar os arquivos parte de uma imagem estática; Os comandos cp interagem com os contêineres ativos.

Quando copiar arquivos com o Docker?

Copiar arquivos manualmente do seu host para um contêiner do Docker, ou vice-versa, deve ser uma ocorrência relativamente rara. As imagens devem ser autocontidas, portanto, devem incluir tudo o que você precisa para iniciar uma instância. A configuração geralmente é tratada por meio de variáveis ​​de ambiente.

Os contêineres que precisam armazenar dados permanentemente devem usar volumes do Docker. Os volumes permitem que os dados sobrevivam a qualquer contêiner, portanto, você não precisa fazer manualmente o docker cp antes de substituir uma instância. Ao fazer backup, copie os volumes de seu host, em vez de extrair arquivos de contêineres.

docker cp é muito útil ao depurar contêineres ou trabalhar em um ambiente de desenvolvimento. Às vezes é necessário injetar manualmente um arquivo de configuração temporário ou extrair um registro oculto. Usar o docker cp é mais rápido e barato do que reconstruir a imagem inteira toda vez que você faz uma alteração no seu código.

Lembre-se sempre de que os arquivos que foram copiados para contêineres permanecerão apenas enquanto o contêiner existir. Iniciar outro contêiner a partir da mesma imagem fornecerá uma ficha limpa, sem os arquivos que você adicionou com docker cp .

Resumo

docker cp permite mover arquivos entre seu host e seus contêineres do Docker. Ele funciona com arquivos e diretórios, mas não possui a maioria dos recursos avançados do shell. comando cp .

O uso regular do docker cp indica um possível desvio das práticas recomendadas para contêineres. É aconselhável tratá-lo como uma ferramenta útil para uso em desenvolvimento, e não como parte integrante do trabalho com contêineres. A persistência de arquivos a longo prazo deve ser implementada com volumes, pois esses são componentes de primeira classe no ecossistema Docker.

  • Como ativar o modo escuro no YouTube
  • O Windows 11 suporta apenas CPU Intel de 7ª geração, não CPU AMD Zen 1

descubra mais conteúdo

Google Pixel Watch também tem detecção de queda, mas não até o próximo ano

As melhores xícaras de café aquecidas de 2022

Como automatizar seu iPhone com base na hora, atividade ou localização

"Isso deve ter sido antes do meu tempo"

Por que a NASA enviou Snoopy para a Lua? – Revisão Geek

O que é uma carga fantasma?

Deixe uma resposta Cancelar resposta

Como copiar um arquivo para um contêiner docker?

Copiando arquivos de e para contêineres do Docker

  1. Etapa 1 – Criar um contêiner do Docker .
  2. Passo 2 – Crie um arquivo dentro do .
  3. Etapa 3 – Obter o ID do contêiner sudo docker start my- contêiner sudo docker container ls.
  4. Passo 4 – Copie o arquivo para o seu sistema local.
  5. Passo 2 – Copie o arquivo para o container .

Onde os arquivos do docker são armazenados?

Em uma instalação padrão, as camadas são armazenadas na janela de encaixe C:\\ProgramData\\ e distribuídas nos diretórios "image" e "windowsfilter". Você pode alterar o local onde as camadas são armazenadas com a configuração docker -root, conforme observado na documentação do Docker Engine no Windows.

Como entrar em um contêiner docker?

Processo

  1. Na máquina host, vá para o diretório de trabalho do Docker onde você implantou anteriormente os arquivos do pacote de imagem do Docker (/mdm).
  2. Execute o comando Docker list para obter uma lista de todos os contêineres do Docker em execução no sistema: docker container ls.

Como exportar um docker?

Para exportar um arquivo, use o seguinte comando: docker save -o file_name.

Ir arriba