Bem-vindo ao nosso tutorial abrangente sobre o uso de volumes no Docker. Neste guia prático, você aprenderá passo a passo como criar, anexar e persistir volumes em contêineres Docker.
Esse tutorial faz parte do Treinamento Docker Compose para Desenvolvedores. >>Clique Aqui<< para conhecer.
Os volumes fornecem uma maneira conveniente de armazenar e compartilhar dados entre contêineres, mantendo a integridade dos dados mesmo quando os contêineres são reiniciados ou interrompidos. Ao entender como trabalhar com volumes, você poderá gerenciar efetivamente o armazenamento de dados em seus ambientes de contêineres.
Vamos começar criando um volume novo e explorar as diferentes etapas para conectar, escrever e verificar o conteúdo de arquivos dentro de contêineres.
Tutorial passo a passo para demonstrar o uso de volumes no Docker:
Primeiro, certifique-se de ter o Docker instalado em sua máquina.
1 – Crie um novo volume chamado “first-volume” usando o seguinte comando:
1 |
docker volume create first-volume |
2 – Para inspecionar o volume criado e visualizar suas informações, utilize o comando:
1 |
docker volume ls --filter="name=first-volume" --format='{{json .}}' |
3 – Agora, vamos criar um container chamado “teste-volume” com a imagem “custom-nginx:0.1” e mapeá-lo para o mountpoint “/storage” usando o volume “first-volume”.
Precisamos assumir que você já tem uma imagem no seu docker engine com o nome “custom-nginx:0.1”. Se você não tem e não sabe como criar, <<clique aqui>> veja esse treinamento completo sobre docker compose para desenvolvedores
Utilize o seguinte comando:
1 |
docker run -d --name teste-volume -v first-volume:/storage custom-nginx:0.1 |
4 – Conecte-se no Container:
1 |
docker exec -it teste-volume /bin/sh |
6 – Escreva uma mensagem de texto dentro do volume
Dentro do container, escreva uma mensagem de texto com o conteúdo “teste-escrita” em um arquivo chamado “/storage/datafile1.txt”. Utilize um editor de texto como o nano para criar o arquivo e adicionar o conteúdo:
1 |
echo teste-escrita > /storage/datafile1.txt |
Saia do container “teste-volume” digitando exit
.
7 – Criando outro Container
Agora, vamos criar outro container chamado “teste-volume-1” baseado na imagem “custom-nginx:0.1” e anexar o volume “first-volume” a ele. Utilize o seguinte comando:
1 |
docker run -d --name teste-volume-1 -v first-volume:/storage custom-nginx:0.1 |
8 – Conecte-se no novo container
1 |
Conecte-se ao container "teste-volume-1" usando o comando: |
Verifique o conteúdo do arquivo “/storage/datafile1.txt” dentro do container “teste-volume-1” para confirmar que a mensagem de texto está presente:
1 |
cat /storage/datafile1.txt |
Saia do container “teste-volume” digitando exit
.
9 – Faça stop dos containers docker
1 2 |
docker stop teste-volume docker stop teste-volume-1 |
Mesmo que os containers tenham sido parados, o conteúdo do volume “first-volume” permanecerá intacto.
Você pode verificar isso reiniciando os containers:
1 2 |
docker start teste-volume docker start teste-volume-1 |
O conteúdo do arquivo “/storage/datafile1.txt” deve continuar sendo “teste-escrita”. Isso acontece porque o volume persiste mesmo quando os containers são parados ou reiniciados.
Docker Shared Volume
Agora, vamos criar um container chamado “shared-volume-1” com a imagem “custom-nginx:0.1” e anexar o volume “first-volume” a ele. Utilize o seguinte comando:
1 |
docker run -it --rm --name shared-volume-1 -v first-volume:/storage custom-nginx:0.1 bash -c "for i in \$(seq 1 1 100000); do echo \$HOSTNAME \$i >> /storage/\$HOSTNAME.txt ; done" |
Abra uma nova janela para executar o comando a seguir:
1 |
docker run -it --rm --name shared-volume-2 -v first-volume:/storage custom-nginx:0.1 bash -c "for i in \$(seq 1 1 100000); do echo \$HOSTNAME \$i >> /storage/\$HOSTNAME.txt ; done" |
Ao executar esses comandos, cada container “shared-volume-1” e “shared-volume-2” irá escrever 100.000 linhas em um arquivo específico para o seu respectivo $HOSTNAME
, dentro do diretório /storage
do volume compartilhado “first-volume”.
Se você quer verificar, basta acessar como “root” o diretório onde o volume foi criado:
1 2 3 4 |
cd /var/lib/docker/volumes/first-volume/_data ls -liart /var/lib/docker/volumes/first-volume/_data cat <nome-arquivo1> cat <nome-arquivo2> |
Dessa forma, você estará compartilhando um volume entre dois contêineres, permitindo que eles escrevam dados no mesmo local, facilitando o compartilhamento de informações entre eles.
Lembre-se de que, mesmo após a execução desses comandos, os dados permanecerão persistentes no volume “first-volume” mesmo quando os contêineres forem removidos. Você pode verificar o conteúdo dos arquivos dentro do volume acessando-o posteriormente.
Montando um Volume como Read Only
Em algumas situações, pode fazer sentido não permitir que arquivos sejam alterados. Nesse caso, é possível montar um volume como read-only.
1 |
docker run -it --rm --name teste-volume -v first-volume:/storage:ro custom-nginx:0.1 |
Vejam que no comando anterior, foi adicionado o parâmetro “ro”. Dessa forma não é possível escrever em arquivos desse volume:
1 |
docker exec -it teste-volume /bin/sh |
Navegue até o diretório e tente escrever ou modificar um arquivo:
1 2 |
cd /storage touch teste-readonly.txt |
Você irá receber uma mensagem parecida com essa:
1 |
/bin/sh: 9: cannot create teste-readonly.txt: Read-only file system |
Como inspecionar um volume no Docker
1 |
docker volume inspect first-volume |
Conclusão
Parabéns! Agora você dominou o uso de volumes no Docker. Neste tutorial, exploramos passo a passo como criar um volume, anexá-lo a contêineres e garantir a persistência dos dados. Os volumes são uma ferramenta poderosa para armazenar e compartilhar dados entre contêineres, permitindo que você mantenha a integridade dos dados mesmo quando os contêineres são reiniciados ou interrompidos.
Ao compreender os conceitos e as etapas envolvidas na criação e no uso de volumes, você pode otimizar o gerenciamento de armazenamento em seus ambientes de contêineres Docker. A capacidade de conectar, escrever e verificar o conteúdo de arquivos em volumes abre um mundo de possibilidades para compartilhar informações entre contêineres e facilita ainda mais o desenvolvimento e a implantação de aplicativos.
Aproveite seu conhecimento recém-adquirido sobre volumes no Docker e experimente diferentes cenários para explorar ainda mais suas funcionalidades. Com a prática contínua, você se tornará um especialista em gerenciamento de armazenamento em contêineres Docker.
Esperamos que este tutorial tenha sido útil e que você esteja pronto para aplicar esses conhecimentos em seus projetos futuros. Mantenha-se atualizado com as últimas práticas recomendadas do Docker e continue explorando novas maneiras de otimizar seu ambiente de contêineres. Happy Dockerizing!