Demosntração
Vamos começar criando um Volume, que se chamara mysql-db:
docker volume create mysql-db
Em seguida, listaremos os volumes para verificar se tudo está correto:
docker volume ls
Agora, executaremos um novo contêiner com o nome "mysql-db", vinculando-o ao volume recém-criado:
docker contêiner run -d --name mysql-db -v mysql-db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql
-d: É usado para executar o contêiner em segundo plano, isso permite que o contêiner libere o terminal para outros comandos.
--name mysql-db: --name é usado para atribuir um nome específico ao contêiner. Neste caso, o nome "mysql-db".
-v mysql-db:/var/lib/mysql: -v é usado para criar e vincular um volume ao contêiner. mysql-db é o nome do volume, e /var/lib/mysql é o caminho dentro do contêiner onde o volume será montado.
Isso permite que os dados do banco de dados MySQL persistam no volume "mysql-db" mesmo que o contêiner seja reiniciado ou removido.
-e MYSQL_ROOT_PASSWORD=root: -e é usado para definir variáveis de ambiente dentro do contêiner.
Essa variável é usada pelo contêiner MySQL para definir a senha do usuário root do banco de dados.
mysql: É a imagem do Docker a ser usada para iniciar o contêiner. Neste caso, a imagem "mysql" será usada para executar o contêiner MySQL.
E então listaremos os contêineres ativos:
docker ps
Para demonstrar que o volume continua ativo mesmo após a remoção do contêiner, excluiremos o contêiner "mysql-db":
docker rm -f 8e8
rm é o comando para remover, e -f é para forçar a remoção, assim será feita mesmo com o contêiner em execução, e 8e8 são os 3 primeiros dígitos do id do contêiner, para identificação
Por fim, mostraremos que o volume ainda existe antes de excluí-lo:
docker volume prune -a
Note que mesmo deletando o contêiner o volume que usávamos continuou existindo, isso é ótimo para salvar dados, fazer backup, compartilhar dados entre contêineres, escalabilidade, etc.
Porém isso pode gerar problema, se você usar o comando para criar um contêiner, por exemplo do próprio mysql, ele gera um volume automaticamente, já que é uma configuração de sua imagem.
Usando varias vezes o comando sem o parâmetro de volume:
docker run -d --name mysql2 -e MYSQL_ROOT_PASSWORD=root mysql
Vários volumes foram criados juntos.
E agora se deletarmos os contêineres, iremos ter vários volumes sem uso ocupando espaço:
docker rm -f 00b 661 31a 631 270
Então tome cuidado, pois nesse exemplo simples os cinco volumes estavam ocupando mais de 1GB.