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:
- Manter os dados quando um contêiner for removido
- Para compartilhar dados entre o sistema de arquivo de host e o contêner do Docker
- Para compartilhar dados com outros contêiners do Docker
Praticando com volumes
Para criar um volume:
docker volume create meu_volume
Executar um contêiner com um volume
docker run -d --name meu_container -v meu_volume:/app/data nginx
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
para verificar podemos utilizar
docker volume ls
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
Após criar a imagem, podemos inspecionar com o comando
docker image inspect mysql:5.7
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
-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árioroot
do MySQL comonumsey
.
Adicionando novo banco de dados
Use o comando abaixo para abrir um terminal dentro do contêiner MySQL:
docker exec -it mysql bash
Depois de estar dentro do contêiner, execute o seguinte comando para acessar o MySQL:
mysql -u root -p
-
u root
→ Especifica o usuário root. -
p
→ Solicita a senha (digitenumsey
quando for solicitado).
Criando um novo banco de dados
CREATE DATABASE meubanco;
Verificar se o banco foi criado
CREATE DATABASE meubanco;
Sair do MySQLE do contêiner
EXIT;
exit
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
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
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)