Os volumes do Docker são a maneira preferida de lidar com dados persistentes criados e usados por contêineres do Docker. Vamos dar uma olhada em como isso funciona, cobrindo como criar volumes do Docker no Windows. Você também aprenderá como gerenciá-los!
Esta postagem no blog tem um vídeo complementar criado pelo colaborador do TechSnips, Matt McElreath. Sinta-se à vontade para assistir ou, se preferir texto, continue lendo!
Armazenando Dados Persistentes
Se você deseja armazenar dados persistentes para contêineres, existem algumas opções. Primeiro, vou mostrar como usar um bind mount. Atualmente, estou em uma pasta chamada data em meu C:\. Se eu listar o conteúdo desta pasta, você verá que tenho cinco arquivos de texto.

Se eu quiser disponibilizar esta pasta para um contêiner, posso montá-la ao iniciar o contêiner.
Vamos lá e executar um contêiner usando docker run
. Vou executar este contêiner no modo interativo e depois especificar -V
. Aqui, vou colocar o caminho para minha pasta de dados, seguido por dois pontos e, em seguida, especificarei o caminho dentro do contêiner onde gostaria que esta pasta fosse montada.
Para isso, vou especificar a pasta C:\shareddata. Em seguida, vou especificar a imagem do servidor central do Windows e, finalmente, vou especificar que desejo executar o PowerShell assim que estiver dentro do contêiner.
Agora que estou dentro do novo contêiner, se eu listar o conteúdo de C:\, você pode ver que tenho uma pasta shareddata.

Vamos entrar nessa pasta e listar o conteúdo. Aqui estão meus cinco arquivos de teste que estão localizados no meu host de contêiner.

I can also create files in this folder, which will be available to other containers or my container host. Let’s go ahead and run a new item to create a file called containertest.

Podemos ver acima que o novo arquivo foi criado de dentro do contêiner. Agora vou sair deste contêiner, o que o desligará, executando exit
.
Se eu executar docker ps
, você pode ver que atualmente não há contêineres em execução.

Enumerando Dados em Volumes Docker
Agora vamos listar o conteúdo da pasta de dados novamente do meu host de contêiner.

Podemos ver o novo arquivo que foi criado de dentro do contêiner chamado containertest. As montagens de ligação têm alguma funcionalidade limitada, no entanto, então os volumes são a maneira preferida de realizar o que estamos tentando fazer. Para começar com volumes, podemos executar o mesmo comando para iniciar um contêiner, mas desta vez com algumas diferenças pequenas. Onde especificamos o volume, em vez de usar o caminho no sistema de arquivos do host do contêiner, vou usar a palavra hostdata como o nome de um volume que quero criar e usar.
De dentro do novo contêiner, se eu listar o conteúdo de C:\, você pode ver novamente que tenho uma pasta chamada shareddata.

Se eu listar o conteúdo dessa pasta, atualmente estará vazia porque criamos um volume em branco. Agora, vamos executar Ctrl-P-Q, o que nos levará para fora do contêiner em execução, mas o manterá em segundo plano.
A partir do host do contêiner, execute docker volume ls
. Isso listará os volumes atuais neste host de contêiner. Eu tenho um volume chamado hostdata, que foi criado quando o especifiquei no comando docker run
.

Se eu executar docker ps
, podemos ver nosso contêiner em execução.

Pare esse contêiner usando docker stop
. Agora não temos mais contêineres em execução.

Remova os contêineres parados executando docker rm
. Se eu listar os volumes novamente, você verá que o volume hostdata ainda está disponível e pode ser montado em novos contêineres.

Criando Volumes do Docker
Outra maneira de criar um volume é usar o comando docker volume create
. Se você não especificar um nome, o Docker dará a ele um nome que é uma longa lista de caracteres aleatórios. Caso contrário, você pode especificar um nome aqui. Vou chamar este volume de logdata. Agora podemos vê-lo na lista quando listamos os volumes novamente.

Agora você irá montá-lo em um novo contêiner. Use docker run
novamente e para o volume especifique o volume que acabou de ser criado e monte-o em c:\logdata.
Do interior do recipiente, vá até a pasta logdata e crie alguns arquivos. Atualmente, não há arquivos neste diretório, então vá em frente e crie alguns.
Agora tenho dois arquivos de log neste diretório.

Execute novamente Ctrl-P-Q para sair deste recipiente enquanto ele ainda está em execução. Enquanto esse recipiente está em execução, inicie um novo recipiente com o mesmo volume montado.
Se executarmos uma listagem na pasta logdata no novo recipiente, podemos ver os dois arquivos de log sendo compartilhados.

Agora, saia deste recipiente. Você deve ter ainda um recipiente em execução e dois recipientes encerrados.

Agora pare todos os recipientes em execução, depois execute docker rm
para remover todos os recipientes encerrados.

Liste os volumes novamente. O volume logdata ainda está disponível para ser montado em futuros recipientes.

Se você executar docker volume
, receberá alguma ajuda de uso para o comando.

Inspeção de Volumes do Docker
Já olhamos para o create
, então vamos para o inspect
. Se eu executar docker volume inspect
no volume logdata, ele retornará as propriedades desse volume, incluindo o ponto de montagem, que é o caminho físico do volume no host do recipiente.

Vamos abrir essa pasta usando Invoke-Item
e dar uma olhada. Sob a pasta logdata, há uma pasta chamada data. Se abrirmos isso, podemos ver os arquivos que foram criados a partir do recipiente anterior.

Exclusão de Volumes do Docker
Para excluir um volume, podemos executar docker volume rm
, seguido pelo nome do volume que deseja excluir.
Agora, se eu listar os volumes, logdata já não estará lá.

Por fim, podemos usar prune
para remover todos os volumes locais não utilizados. Isso excluirá todos os volumes que não estão montados em um contêiner em execução ou parado.

Você deve ter cuidado com este comando, pois há um aviso e uma solicitação para garantir que você realmente deseja fazer isso. Se eu digitar Y
e pressionar Enter, ele mostrará quais volumes foram excluídos.
E se eu listar meus volumes novamente, você verá que todos foram excluídos.

Resumo
Neste post do blog, você deve ter obtido uma boa visão geral sobre como gerenciar volumes do Docker no Windows. O Docker é uma excelente plataforma de contêineres. Com seu suporte para o Windows e suas novas habilidades em gerenciar volumes do Docker, você será imparável!