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 começar!
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.
- O 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 última imagem Docker 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 comando docker cp
. 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.
Vamos aprender como usar o comando Docker cp com um exemplo.
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 seguinte docker run 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 seguintes parâmetros no comando, da seguinte forma:
- Usando o arquivo ou a – Copia todas as permissões de usuário e grupo primário dos arquivos e pastas.
- Usando 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
copiará o myfile.txt que você criou anteriormente para o diretório /usr/share dos contêineres. ccae4670f030
é o ID do contêiner para o qual o myfile.txt será copiado.
6. Por fim, faça login SSH no contêiner em execução executando o comando docker exec
com /bin/bash
, que é usado como 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 interativamente.sudo docker exec -it ccae4670f030 /bin/bash
Você verá abaixo que está agora conectado ao shell do contêiner quando executar docker exec
.

7. Depois de fazer login no contêiner, verifique se o myfile.txt foi copiado para o contêiner usando o comando ls.
- O comando
ls
é usado para listar arquivos de computador em sistemas operacionais Unix e similares ao Unix. - O comando
grep
irá procurar por todos os arquivos ou pastas que começam 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 só vez? Certamente, executar múltiplos comandos se torna uma sobrecarga! Para resolver o problema de executar 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 poderia 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, em seguida, mude (cd
) o diretório de trabalho para essa pasta. Esta pasta conterá todos os arquivos que você irá criar nesta demonstração.
2. Agora, crie dois arquivos de texto chamados myfile1.txt e myfile2.txt, copie e cole o conteúdo neles 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 concluído, o Docker usará este DockerFile para executar todos os comandos necessários para construir uma nova imagem Docker em cima de qualquer imagem base.
O DockerFile abaixo contém várias etapas/instruções que irão construir o novo contêiner:
FROM
– A instrução FROM inicializa uma nova etapa de compilação e define a Imagem Base para instruções subsequentes.COPY
– O comando COPY copia um arquivo da máquina host (host Docker) para o contêiner.
4. Verifique todos os arquivos necessários para construir a nova imagem executando o comando tree
. Você deverá 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 updated_ubuntu_image
com a versão latest
e .
permite que o Docker pegue todos os arquivos necessários do diretório de trabalho atual.

docker build
command 6. Agora, verifique a imagem recém-criada updated_ubuntu_image
executando o comando docker images
. Observe o atributo REPOSITORY. Este atributo é a marca 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
.
Assumindo que você ainda está 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.

4. 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. Depois de executar o comando docker inspect
, ele exibirá todos os detalhes do contêiner especificado (detalhes volume_testing
), incluindo os detalhes de montagem, como mostrado abaixo.
Abaixo, a imagem confirma que o volume (my-vol
) que você criou no host está montado com sucesso com o diretório /app
do contêiner.

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