DEV Community

Yuri Peixinho
Yuri Peixinho

Posted on

Volumes em Docker

Os volumes separam os arquivos de dados que são gerados por um aplicativo ou banco de dados do restante do armazenamento do contêiner. Eles permitem que os dados importantes existam foram do contêiner, o que significa que você pode substituir um contêiner sem perder os dados que ele criou.

Eles tornam possível excluir um contêiner sem também excluir os dados que contém, o que permite que os contêiners sejam alterados ou atualizados sem perder os dados e informações armazenadas.

Seus principais usos são:

  1. Manter os dados quando um contêiner for removido
  2. Para compartilhar dados entre o sistema de arquivo de host e o contêner do Docker
  3. Para compartilhar dados com outros contêiners do Docker

Image description

Praticando com volumes

Para criar um volume:

docker volume create meu_volume
Enter fullscreen mode Exit fullscreen mode

Executar um contêiner com um volume

docker run -d --name meu_container -v meu_volume:/app/data nginx
Enter fullscreen mode Exit fullscreen mode
Opção Descrição
docker run Executa um novo contêiner.
-d Executa o contêiner em modo desacoplado (background).
--name meu_container Dá o nome meu_container ao contêiner.
-v meu_volume:/app/data Monta o volume meu_volume dentro do contêiner no caminho /app/data.
nginx Usa a imagem do Nginx como base para o contêiner.

Criando volumes: DataBase MySQL

Vamos criar um repositório de volumes de dados chamado dadosdb

docker volume create dadosdb
Enter fullscreen mode Exit fullscreen mode

para verificar podemos utilizar

docker volume ls 
Enter fullscreen mode Exit fullscreen mode

A partir da criação desse volume, temos que referencia-lo a um container existente criado a partir do MySql.

docker image pull mysql:5.7
Enter fullscreen mode Exit fullscreen mode

Após criar a imagem, podemos inspecionar com o comando

docker image inspect mysql:5.7
Enter fullscreen mode Exit fullscreen mode

Na saída deste comando, vemos as seção Volumes que indica que esta imagem usa o volume para o diretório var/lib/mysql que é o local onde o MySQL armazena os seus arquivos de dados.

agroa vamos criar um container a partir da imagem:

docker run -d --name mysql -v dadosdb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=numsey mysql:5.7
Enter fullscreen mode Exit fullscreen mode

-v dadosdb:/var/lib/mysql

Esse volume faz com que os dados do banco fiquem persistentes, ou seja, se o contêiner for excluído e um novo for criado, os dados permanecerão salvos dentro do volume dadosdb.

dadosdb: Nome do volume Docker onde os dados do MySQL serão armazenados.

/var/lib/mysql : Diretório dentro do contêiner onde o MySQL armazena seus arquivos de banco de dados.

Se o -v não fosse usado, os dados seriam apagados toda vez que o contêiner fosse removido.

  • Monta um volume para armazenar os dados do banco (explicação detalhada abaixo).

-e MYSQL_ROOT_PASSWORD=numsey

  • Define a variável de ambiente MYSQL_ROOT_PASSWORD, que configura a senha do usuário root do MySQL como numsey.

Adicionando novo banco de dados

Use o comando abaixo para abrir um terminal dentro do contêiner MySQL:

docker exec -it mysql bash
Enter fullscreen mode Exit fullscreen mode

Depois de estar dentro do contêiner, execute o seguinte comando para acessar o MySQL:

mysql -u root -p
Enter fullscreen mode Exit fullscreen mode
  • u root → Especifica o usuário root.
  • p → Solicita a senha (digite numsey quando for solicitado).

Criando um novo banco de dados

CREATE DATABASE meubanco;
Enter fullscreen mode Exit fullscreen mode

Verificar se o banco foi criado

CREATE DATABASE meubanco;
Enter fullscreen mode Exit fullscreen mode

Sair do MySQLE do contêiner

EXIT;
exit
Enter fullscreen mode Exit fullscreen mode

Removendo container

O ponto agora será remover o container. Em teoria todos os dados deveriam ser apagados, já que removemos o container, correto? Porém ao criar o volume e mapaear a tags vamos fazer essa preservação de dados.

Resolvemos que vamos remover o container

docker rm mysql
Enter fullscreen mode Exit fullscreen mode

Vamos agora criar um outro contêiner, mas com outro nome

docker run -d --name macmysql -v dadosdb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=numsey mysql:5.7
Enter fullscreen mode Exit fullscreen mode

ao executar todos os passos a cima novamente para acessar o banco de dados, podemos ver que agora temos já cadastrado o banco “meubanco” em nosso container.

Top comments (0)