Entre para a LISTA VIP da Black Friday

00

DIAS

00

HORAS

00

MIN

00

SEG

Clique para saber mais

Criando volumes com Docker

Criando volumes com Docker
Yuri Matheus
Yuri Matheus

Compartilhe

Quando um container é removido todas as suas informações são perdidas. Será que existe algum meio de persistir as informações do container? Esse meio se chama volume e vamos ver como criá-los.

Criando nosso volume

Nós queremos criar uma cópia dos dados que estão no container para a nossa máquina. Caso o container venha a cair ou seja removido, podemos falar para ele onde está os dados. Dessa forma, nossas informações ficam salvas independente do estado do container.

Ou seja, queremos falar para o Docker criar um repositório de dados para os containers, ou, como é chamado volume.

Vamos falar para o docker que queremos criar um volume volume create chamado dados-do-banco, no meu caso:

docker volume create dados-do-banco

Aparentemente deu tudo certo, mas como podemos saber quais são nossos volumes? Bem, podemos falar para o docker listá-los (ls):

docker volume ls

Neste comando o Docker nos mostra qual o nome do volume e o seu driver. Isto é, qual é a forma que ele deve montar o volume. No meu caso, este é o driver local, o driver padrão (built-in) do Docker.

Bacana, já temos um volume criado, mas como podemos atribuí-lo a um container?

Banner da promoção da black friday, com os dizeres: A Black Friday Alura está chegando. Faça parte da Lista VIP, receba o maior desconto do ano em primeira mão e garanta bônus exclusivos. Quero ser VIP

Referenciando um volume

Já temos o nosso volume criado, então, vamos falar para o docker rodar um container container run, chamado db (--name db), no meu caso, com o nosso volume (-v) dados-do-banco associado ao diretório do container que guarda as informações que desejamos salvar, /var/lib/mysql, neste caso:

docker container run --name db -v dados-do-banco:/var/lib/mysql

Dessa forma, estamos falando para o Docker criar um container e associar o diretório /var/lib/mysql ao volume dados-do-banco. Nossa aplicação precisa de uma senha para se logar no banco de dados, então vamos falar que este container, em seu ambiente (-e, environment), terá a senha alura:


docker container run --name db -v dados-do-banco:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=alura

Legal, agora basta falarmos qual é a imagem que criará nosso container, no nosso caso, é a imagem do MySQL:


docker container run --name db -v dados-do-banco:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=alura mysql

Legal nosso container está rodando, vamos fazer alguns testes para testar nosso volume. Em uma outra aba no terminal, vamos falar para o docker que queremos executar alguns comandos em um container (container exec) com um terminal interativo (-ti) no nosso container bd com o interpretador /bin/bash:

docker container exec -it db /bin/bash

Vamos logar no mysql com o usuário (-u) root e com a senha -p alura:

Vamos criar (create) um banco de dados (database) para fazer o nosso teste, no meu caso, vou chamar esse banco de dados de loja:

Vamos sair do nosso container, para isso, podemos apertar as teclas CTRL + D até voltarmos ao nosso terminal, ou então, utilizar o atalho Ctrl + P + Q. Falamos para o docker parar o nosso container (container stop) db e em seguida falar para ele removê-lo (container rm):

docker container stop db

docker container rm db

Mesmo tendo removido o container, as informações dele devem ter ficado salvas no volume. Vamos criar um novo container, dessa vez vou nomeá-lo de banco e referenciar o mesmo volume dados-do-banco ao diretório /var/lib/mysql:


docker container run --name banco -v dados-do-banco:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=alura mysql

Vamos ver se nossas informações ficaram salvas, vamos acessar esse novo container com o comando docker container exec -it banco /bin/bash e acessar o mysql

docker container exec -it banco /bin/bash

mysql -u root -p

Vamos falar para o banco de dados mostrar (show) as bases de dados existentes (databases):

show databases;

Veja que nossa base de dados loja está aparecendo normalmente, ou seja, conseguimos manter os dados mesmo após o container ter sido excluído.

Para saber mais

Nós podemos referenciar mais de um container para o mesmo volume. Ou seja, nós podemos ter dois ou mais container referenciando para o mesmo volume.

Esses nosso volumes ficam guardados no diretório /var/lib/docker/volumes/, porém, conseguimos também criar volumes em outros diretórios, basta que na hora da criação do container, passar como parâmetro o caminho da pasta, ao invés do nome do volume:


docker container run --name db -v /outro/diretorio/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql

Nós vimos como criar um volume, mas como podemos removê-lo? Nós podemos falar para o docker remover o volume (volume rm):

docker volume rm dados-do-banco

Lembrando que para remover um volume, nenhum container pode estar utilizando-o.

O Docker ganhou muito espaço tanto no cenário de desenvolvimento quanto no de infra, isso porque ele vem com o objetivo de facilitar o desenvolvimento de aplicações.

Aqui na Alura, temos uma formação em DevOps, nele você aprenderá tudo sobre o que é um container, como fazer eles se comunicarem, além de aprender como criar suas próprias imagens para personalizar seus container.

Yuri Matheus
Yuri Matheus

Yuri é desenvolvedor e instrutor. É estudante de Sistemas de Informação na FIAP e formado como Técnico em Informática no Senac SP. O seu foco é nas plataformas Java e Python e em outras áreas como Arquitetura de Software e Machine Learning. Yuri também atua como editor de conteúdo no blog da Alura, onde escreve, principalmente, sobre Redes, Docker, Linux, Java e Python.

Veja outros artigos sobre DevOps