Docker volumes são a maneira preferida de lidar com dados persistentes criados e usados por contêineres Docker. Vamos dar uma olhada em como isso funciona, cobrindo como criar volumes Docker no Windows. Você também aprenderá a gerenciá-los!
Esta postagem no blog possui um vídeo complementar criado por colaborador da 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 no 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 executar um contêiner usando docker run
. Vou executar este contêiner no modo interativo, em seguida, especificar -V
. Aqui, vou colocar o caminho para minha pasta de dados, seguido por dois pontos, e então 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 quero 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 irá desligá-lo, executando exit
.
Se eu executar docker ps
, você verá que atualmente não há contêineres em execução.

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

Podemos ver o novo arquivo que foi criado de dentro do contêiner chamado containertest. Os pontos de montagem têm algumas funcionalidades limitadas, no entanto, portanto, 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 pequenas diferenças. 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 está vazia porque criamos um volume em branco. Agora vamos executar Ctrl-P-Q, que nos tirará 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 Docker
Outra maneira de criar um volume é usando o comando docker volume create
. Se você não especificar um nome, o Docker dará um nome que é uma longa lista de caracteres aleatórios. Caso contrário, você pode especificar um nome aqui. Vou chamar esse 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.
De dentro do contêiner, vá para a pasta logdata e crie alguns arquivos. No momento, não há arquivos neste diretório, então vá em frente e crie alguns.
Agora tenho dois arquivos de log nesta pasta.

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

Agora, saia deste contêiner. Você ainda deve ter um contêiner em execução e dois contêineres parados.

Agora pare todos os contêineres em execução, em seguida, execute docker rm
para remover todos os contêineres parados.

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

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

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

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 contêiner anteriormente.

Excluindo Volumes Docker
Para excluir um volume, podemos executar docker volume rm
, seguido pelo nome do volume que deseja excluir.
Agora, se listarmos os volumes, logdata já não estará mais 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.

É importante ter cuidado com este comando, por isso há um aviso e um prompt para garantir que você realmente deseja fazer isso. Se eu digitar Y
e pressionar enter, ele me 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ê deveria ter obtido uma boa visão geral sobre como gerenciar volumes do Docker no Windows. O Docker é uma ótima plataforma de contêineres. Com seu suporte para Windows e suas novas habilidades em gerenciar volumes do Docker, você será imparável!