Introdução
Esta seção abordará o uso de repositórios de dados persistentes em um ambiente Docker, conhecidos como volumes. Você aprenderá as características do armazenamento persistente, como a distinção entre volumes internos e externos, e entenderá as melhores práticas de aplicação.
Gerenciamento de Volumes de Dados
Os volumes de dados são a operação padrão para persistência de dados no Docker. Nesta seção, guiaremos você pelas operações fundamentais com volumes na prática.
Objetivo
Sua meta é criar um volume de dados chamado my-vol utilizando o comando docker e adicionar um arquivo chamado test.txt dentro deste volume.
Exemplo de Resultado
Aqui está um exemplo do que você deve ser capaz de realizar ao final deste desafio:
- Criar um volume de dados chamado
my-vol.
labex:~/ $ docker volume ls
DRIVER VOLUME NAME
local jenkins-data
local minikube
local my-vol
- Obter o
Mountpointatravés dos detalhes do volume.
[
{
"CreatedAt": "2024-01-20T17:37:33+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
]
- Acessar o
Mountpointe criar o arquivotest.txt.
root@iZj6cj604ytlr2cacq6vi2Z:/var/lib/docker/volumes/my-vol/_data## pwd
/var/lib/docker/volumes/my-vol/_data
root@iZj6cj604ytlr2cacq6vi2Z:/var/lib/docker/volumes/my-vol/_data## ls
test.txt
Requisitos
Para concluir este desafio, você precisará:
- Saber como criar um volume de dados usando o comando
docker. - Criar um arquivo utilizando o usuário
root. - Alternar para o usuário
rootusandosudo sue definir a senha dorootcomsudo passwd root.
Criando Containers com Volumes de Dados
Nesta seção, criaremos containers utilizando volumes de dados do Docker e realizaremos a cópia de arquivos.
Objetivo
Seu objetivo é criar um volume Docker chamado nginx-vol, iniciar um container chamado nginx montando este volume e, por fim, copiar o arquivo /home/labex/project/index.html para dentro do container nginx.
Exemplo de Resultado
Aqui está um exemplo do que você deve alcançar:
- Criar um volume de dados chamado
nginx-vol.
labex:~/ $ docker volume ls
DRIVER VOLUME NAME
local jenkins-data
local minikube
local my-vol
local nginx-vol
- Criar um container chamado
nginxbaseado na imagem nginx que montará seu diretório/usr/share/nginx/htmlno volumenginx-vol.
labex:~/ $ docker ps | grep nginx
c39296aaf39e nginx "/docker-entrypoint.…" 35 seconds ago Up 31 seconds 80/tcp nginx
- Verificar o arquivo
/home/labex/project/index.htmllocalmente.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat index.html
hello world
- Copiar o arquivo
/home/labex/project/index.htmlpara o containernginxe verificar o conteúdo.
labex:/tmp/ $ docker exec nginx cat /usr/share/nginx/html/index.html
hello world
Requisitos
Para concluir este desafio, você precisará:
- Saber criar um volume de dados via linha de comando Docker.
- Saber como iniciar um container.
- Saber como copiar arquivos locais para dentro de containers.
Criando Containers com Host Path
Em muitos cenários, em vez de volumes gerenciados, preferimos utilizar diretórios nativos do sistema hospedeiro para persistência de dados. Nesta seção, utilizaremos um diretório local para criar containers.
Objetivo
Sua meta é criar um container que utilize um Host Path (caminho do hospedeiro), copiar o arquivo /home/labex/project/nginx.txt para dentro do container e verificar se os arquivos no container correspondem aos do Host Path.
Exemplo de Resultado
Aqui está o que se espera ao final deste desafio:
- Criar um diretório
nginxdentro do diretório/tmp.
labex:/tmp/ $ ls | grep nginx
nginx
- Iniciar o container
nginx-hostbaseado na imagemnginx, montando o diretório/tmp/nginxno caminho/usr/share/nginx/htmldo container.
labex:/tmp/ $ docker ps | grep nginx-host
6fc2d40e12df nginx "/docker-entrypoint.…" 44 seconds ago Up 43 seconds 80/tcp nginx-host
- Verificar os detalhes específicos da montagem com o comando
docker inspect.
"Mounts": [
{
"Type": "bind",
"Source": "/tmp/nginx",
"Destination": "/usr/share/nginx/html",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
- Verificar o conteúdo do arquivo
/home/labex/project/nginx.txtlocalmente.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat nginx.txt
hello nginx
- Copiar o arquivo para o diretório montado e verificar via container.
labex:nginx/ $ docker exec nginx-host cat /usr/share/nginx/html/nginx.txt
hello nginx
- Validar se o arquivo
nginx.txtaparece no diretório/tmp/nginxda máquina local.
labex:nginx/ $ pwd
/tmp/nginx
labex:nginx/ $ cat nginx.txt
hello nginx
Requisitos
Para concluir este desafio, você precisará:
- Identificar o
Host Pathque deseja utilizar. - Saber usar comandos internos do container para verificar o acesso a arquivos do hospedeiro.
- Saber iniciar containers utilizando montagens do tipo Host Path.
- Estar familiarizado com comandos básicos de Linux como
cd,mkdir,touch, etc.
Compartilhamento de Dados entre Containers
Em ambientes conteinerizados, frequentemente é necessário compartilhar dados entre diferentes containers. Existem várias técnicas para isso, e este desafio explorará como realizar esse compartilhamento de forma eficiente.
Objetivo
Sua meta é implementar o compartilhamento de dados entre dois containers. Especificamente, você usará um Host Path para iniciar o container A, depois iniciará um container B montando os volumes do container A, permitindo a troca de informações entre ambos.
Exemplo de Resultado
Aqui está o fluxo esperado para este desafio:
- Criar um diretório
/tmp/shareno host local.
labex:/tmp/ $ ls -ld /tmp/share
drwxr-xr-x 2 labex labex 4096 Jan 20 18:20 /tmp/share
- Criar um container chamado
nginx-sharemontando o diretório local/tmp/shareem/usr/share/nginx/html.
labex:/tmp/ $ docker ps | grep nginx-share
216d02d94f39 nginx "/docker-entrypoint.…" 55 seconds ago Up 55 seconds 80/tcp nginx-share
- Criar um container chamado
busybox-sharebaseado na imagembusyboxe montar os volumes a partir do containernginx-share.
labex:/tmp/ $ docker ps | grep busy
30bf04aee681 busybox "sh" 43 seconds ago Up 42 seconds busybox-share
- Verificar o arquivo
/home/labex/project/share.txtlocalmente.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat share.txt
hello share
- Validar o acesso ao arquivo através do container
nginx-share.
labex:/tmp/ $ docker exec nginx-share cat /usr/share/nginx/html/share.txt
hello share
- Acessar o container
busybox-sharepara confirmar se o arquivoshare.txtestá visível lá também.
labex:/tmp/ $ docker exec busybox-share cat /usr/share/nginx/html/share.txt
hello share
Requisitos
Para concluir este desafio, você precisará:
- Estar familiarizado com operações básicas e conceitos de containers Docker.
- Utilizar ferramentas de linha de comando Docker para criar, executar e parar containers.
- Compreender o conceito e a utilidade dos volumes de dados.
- Entender como montar volumes de um container em outro.
- Conhecer comandos básicos de Linux como
cd,mkdir,touch, etc.
Resumo
Parabéns por concluir este desafio! Agora que você domina o uso de volumes de armazenamento em containers, está pronto para gerenciar dados de forma profissional em seus projetos. Continue assim!



