Se você precisa copiar arquivos do host Docker para o seu contêiner Docker, este tutorial é para você.
Neste tutorial, você aprenderá a copiar arquivos do host Docker para um contêiner Docker usando várias abordagens.
Vamos lá!
Pré-requisitos
Se você deseja seguir passo a passo, certifique-se de ter o seguinte:
- A Linux host. This tutorial uses Ubuntu 18.04.5 LTS.
- Docker instalado no host Linux. Este tutorial usa o Docker v19.03.11. Você pode confirmar a versão do seu Docker executando
docker version
.
- Qualquer imagem Docker baixada e disponível. Este tutorial usa a imagem Docker mais recente do NGINX disponível no Docker Hub.
Copiando Arquivos com o Comando docker cp
Para começar este tutorial, você aprenderá a copiar arquivos do host Docker para os contêineres usando o docker cp
comando. O comando docker cp
copia arquivos ou pastas entre um contêiner e o sistema de arquivos local do seu host Docker e vice-versa.
1. Abra um terminal em sua máquina local.
2. Crie um arquivo chamado myfile.txt usando o comando touch
. O arquivo myfile.txt será copiado do host Docker para o contêiner.
3. Execute o comando docker run
. O docker run abaixo criará um novo contêiner em segundo plano. O comando abaixo contém três parâmetros descritos a seguir:
d
flag that runs the container in the background and keeps it alive until deleted.p
flag publishes a container’s port80
to the host on port80
.nginx
será a imagem usada para executar o contêiner.

4. Verifique se o contêiner Docker foi criado com sucesso usando o comando docker ps
. Após executar o comando docker ps
, você deverá ver um novo valor gerado sob o atributo CONTAINER ID (neste caso, ccae4670f030
) usando a imagem NGINX, confirmando que o contêiner foi criado com sucesso.

Antes de executar o comando Docker cp, a sintaxe do comando Docker cp é:
CONTAINER: SRC_PATH
especifica o caminho de origem do contêiner.DEST_PATH
é o caminho de destino no host.CONTAINER: DEST_PATH
é o caminho de destino no contêiner.
Além disso, você também pode adicionar as opções
com os parâmetros abaixo no comando, da seguinte forma:
- Usar o arquivo ou a – Copia todas as permissões de usuário e grupo primário dos arquivos e pastas.
- Usar L – Especificar a opção L permitirá que qualquer link simbólico no Caminho de Origem seja copiado para o caminho de destino.
5. Em seguida, execute o comando docker cp
. O comando docker cp
irá copiar o myfile.txt que você criou anteriormente para o diretório /usr/share dos containers. ccae4670f030
é o ID do container para o qual o myfile.txt será copiado.
6. Por fim, SSH no contêiner em execução executando o comando docker exec
com /bin/bash
, que é usado como o shell padrão para login de usuário do sistema Linux.
- A flag
i
indica que você deseja abrir uma sessão SSH interativa para o contêiner. A flagi
não fecha a sessão SSH mesmo se o contêiner não estiver anexado. - A flag
t
aloca um pseudo-TTY que deve ser usado para executar comandos de forma interativa.sudo docker exec -it ccae4670f030 /bin/bash
Você verá abaixo que agora está conectado ao shell do contêiner quando executar docker exec
.

7. Após fazer login no contêiner, verifique se o arquivo myfile.txt foi copiado para o contêiner usando o comando ls.
ls
é um comando para listar arquivos de computador em sistemas operacionais Unix e Unix-like.grep
irá procurar por todos os arquivos ou pastas, começando com a stringmy
dentro do diretório usr/share.

Copiando Arquivos usando DockerFile
Na seção anterior, você aprendeu como copiar os arquivos para o contêiner executando o comando Docker cp. E se você precisar copiar vários arquivos de uma vez? Certamente, executar vários comandos se torna uma sobrecarga! Para resolver a execução de vários comandos cp, por que não tentar copiar arquivos ou pastas para contêineres usando Dockerfile com comandos COPY
?
Implantar um contêiner e copiar os arquivos/pastas usando Dockerfile permite remover as etapas de cópia manual que você fez na seção anterior. Um Dockerfile é um documento de texto que contém todos os comandos que um usuário pode chamar na linha de comando para montar uma imagem.
Vamos criar um Dockerfile, executar um contêiner a partir dele e finalmente copiar os arquivos.
1. Crie uma pasta chamada ~/host-to-container-copy-demo, então mude (cd
) o diretório de trabalho para essa pasta. Esta pasta conterá todos os arquivos que você criará neste demo.
2. Agora, crie dois arquivos de texto chamados myfile1.txt e myfile2.txt, copie e cole-os nos arquivos e salve-os no diretório ~/host-to-container-copy-demo.
3. Crie outro arquivo, copie/cole a configuração abaixo e salve o arquivo como Dockerfile dentro do diretório ~/host-to-container-copy-demo. Quando completo, o Docker usará este DockerFile para executar todos os comandos necessários para construir uma nova imagem do Docker em cima de qualquer imagem base.
O DockerFile abaixo contém vários passos/instruções que construirão o novo container:
FROM
– A instrução FROM inicializa uma nova etapa de construção e define a Imagem Base para instruções subsequentes.COPY
– O comando COPY copia um arquivo da máquina host (host do Docker) para o container.
4. Verifique todos os arquivos necessários para construir a nova imagem executando o comando tree
. Você deve ver Dockerfile, myfile1.txt e myfile2.txt no diretório ~/host-to-container-copy-demo.

5. Em seguida, construa a imagem executando o comando docker build
. A bandeira t
é usada para marcar a imagem como updated_ubuntu_image
com a tag latest
e .
permite ao Docker pegar todos os arquivos necessários do diretório de trabalho atual.

docker build
command 6. Agora, verifique a nova imagem construída updated_ubuntu_image
executando o comando docker images
. Observe o atributo REPOSITORY. Este atributo é a tag criada com a bandeira -t
na etapa anterior.

7. Por fim, execute o contêiner Docker usando a imagem recém-criada, executando o comando docker run
. A bandeira -it
instrui o Docker a alocar um pseudo-terminal conectado ao stdin do contêiner. bash
fornece o shell padrão para o login do usuário no sistema Linux.
Você verá abaixo que agora está no shell Bash do contêiner Docker.

8. Em seguida, verifique se os arquivos foram copiados com sucesso no contêiner nos diretórios /tmp e /usr/share executando o comando ls
.

Montando um Volume de Armazenamento e Acessando Arquivos com o Comando Docker Volume
Até agora, você aprendeu como copiar arquivos do host para o contêiner usando duas abordagens diferentes, utilizando o comando docker cp
e um DockerFile. Desta vez, vamos aprender como compartilhar facilmente sistemas de arquivos entre o host e os contêineres usando o comando docker volume
.
Supondo que você ainda esteja conectado ao terminal:
1. Crie um volume no host do Docker executando o comando docker volume create
. O comando abaixo criará um volume chamado my-vol
. sudo docker volume create my-vol
2. Verifique se o volume foi criado com sucesso executando o comando docker volume ls
. O comando docker volume ls lista o volume. Após executar o comando docker volume ls
, você verá my-vol
no atributo NOME DO VOLUME, confirmando que o volume foi criado com sucesso.

3. Em seguida, execute o contêiner usando o comando docker run
.
- O contêiner chamado
volume_testing
utiliza a imagemnginx: latest
. d
flag runs the container in the background and keeps it alive until deleted.v
flag mounts the volumemy-vol
created on Docker host to the container’s destination/app
directory.

Verifique se o volume my-vol que você criou anteriormente está montado corretamente com o contêiner usando o comando docker inspect
. O comando docker inspect fornece as informações do contêiner. Após executar o comando docker inspect
, ele exibirá todos os detalhes do contêiner especificado (volume_testing), incluindo os detalhes de montagem, conforme mostrado abaixo.
Abaixo, o instantâneo da imagem confirma que o volume (my-vol) que você criou no host está montado com sucesso no diretório /app
do contêiner.

Conclusão
Neste tutorial, você aprendeu diferentes maneiras de copiar arquivos ou pastas do host Docker para os contêineres, como usar o comando Docker cp, comandos de volume Docker e Dockerfile.
Então, qual abordagem você vai usar a seguir ao copiar dados do host para contêineres Docker?