Os volumes do Docker são usados para armazenar dados persistentes fora de seus contêineres. Eles permitem que arquivos de configuração, bancos de dados e caches usados por seu aplicativo sobrevivam a instâncias de contêiner individuais.
Os volumes podem ser montados quando você inicia contêineres com o comando docker run
-v
sinalizador. Isso pode se referir a um volume nomeado ou montar um diretório de host no sistema de arquivos do contêiner.
Também é possível definir volumes no tempo de compilação da imagem usando a instrução VOLUME
em seus Dockerfiles. Esse mecanismo garante que os contêineres inicializados a partir da imagem tenham armazenamento persistente disponível. Neste artigo, você aprenderá como usar esta instrução e os casos de uso em que ela faz sentido.
índice
- Definindo volumes em Dockerfiles
- Preencha o conteúdo do volume inicial
- Substituindo as instruções de VOLUME ao iniciar um contêiner
- Quando você deve usar instruções VOLUME?
- Armadilhas de VOLUME
- Resumo
Definindo volumes em Dockerfiles
A instrução VOLUME
do Dockerfile cria um ponto de montagem de volume em um caminho de contêiner especificado. Um volume será montado a partir do sistema de arquivos do host do Docker sempre que um contêiner for iniciado.
O Dockerfile no exemplo a seguir define um volume no caminho /opt/app/data
do contêiner. Novos contêineres montarão automaticamente um volume no diretório.
DO Ubuntu: 22.04 VOLUME /opt/app/data
Crie sua imagem para testar a montagem do volume:
$ docker build -t volumes-test:latest .
Recupere a lista de volumes existentes para referência:
$ docker volume ls DRIVER VOLUME NAME local demo-volume
Agora inicie um contêiner usando sua imagem de teste:
$ docker run -it volume-test:latest [email protected] :/#
Repita o comando docker volume ls
para confirmar que um novo volume foi criado:
$ docker volume ls DRIVER VOLUME NAME local 3198bf857fdcbb8758c5ec7049f2e31a40b79e329f756a68725d83e46976b7a8 local demo-volume
Saia do shell do seu contêiner de teste para fazer o contêiner parar:
[email protected] :/# exit exit
O volume e seus dados ainda persistirão:
$ docker volume ls DRIVER VOLUME NAME local 3198bf857fdcbb8758c5ec7049f2e31a40b79e329f756a68725d83e46976b7a8 local demo-volume
Você pode definir vários volumes em uma instrução como uma string delimitada por espaço ou uma matriz JSON. Os dois formulários a seguir criam e montam dois volumes exclusivos quando os contêineres são iniciados:
VOLUME /opt/app/data /opt/app/config # OU VOLUME ["/opt/app/data", "/opt/app/config"]
Preencha o conteúdo do volume inicial
Os volumes são preenchidos automaticamente com o conteúdo colocado no diretório de montagem usando as etapas de criação de imagens acima:
DO Ubuntu: 22.04 COPY default-config.yaml /opt/app/config/default-config.yaml VOLUME /opt/app/config
Este Dockerfile define um volume a ser inicializado com o arquivo default-config.yaml
existente. O contêiner poderá ler /opt/app/config/default-config.yaml
sem precisar verificar se o arquivo existe.
As alterações no conteúdo de um volume feitas após a instrução VOLUME
serão descartadas. Neste exemplo, o arquivo default-config.yaml
ainda está disponível depois que os contêineres são iniciados porque o comando rm
vem depois que /opt/app/config
é marcado como um volume.
DO Ubuntu: 22.04 COPY default-config.yaml /opt/app/config/default-config.yaml VOLUME /opt/app/config RUN rm /opt/app/config/default-config.yaml
Substituindo as instruções de VOLUME ao iniciar um contêiner
Os volumes criados pela instrução VOLUME
são nomeados automaticamente com um hash longo exclusivo. Seus nomes não podem ser alterados, portanto, pode ser difícil identificar quais volumes são usados ativamente por seus contêineres.
Você pode impedir que esses volumes apareçam definindo manualmente os volumes em seus contêineres com docker run -v
como de costume. O comando a seguir monta explicitamente um volume nomeado no diretório /opt/app/config
, tornando a instrução VOLUME
do Dockerfile redundante.
$ docker run -it -v config:/opt/app/config volumes-test:latest
Quando você deve usar instruções VOLUME?
As instruções VOLUME
podem ser úteis em situações em que você deseja forçar o uso da persistência, como em imagens que empacotam um servidor de banco de dados ou armazenamento de arquivos. O uso de instruções VOLUME
facilita a inicialização de contêineres sem lembrar os sinalizadores -v
a serem aplicados.
VOLUME
também serve como documentação para caminhos de contêiner que armazenam dados persistentes. Incluir essas instruções em seu Dockerfile permite que qualquer pessoa determine onde seu contêiner armazena seus dados, mesmo que não esteja familiarizado com seu aplicativo.
Armadilhas de VOLUME
VOLUME
tem suas desvantagens. Seu maior problema é como ele interage com as construções da imagem. Usar uma imagem com uma instrução VOLUME
como a imagem base de sua compilação se comportará de forma inesperada se o conteúdo dentro do ponto de montagem do volume for alterado.
A pegadinha de antes ainda se aplica: os efeitos dos comandos após o comando VOLUME
serão descartados. Como VOLUME
residirá na imagem base, tudo em seu próprio Dockerfile vem após o comando e você não pode modificar o conteúdo padrão do diretório. Nos bastidores, iniciar o contêiner temporário para a compilação criará um novo volume em seu host que será destruído no final da compilação. As alterações não serão copiadas de volta para a imagem de saída.
A montagem automática de volume também pode ser problemática em outras situações. Às vezes, os usuários podem preferir iniciar um contêiner temporário sem nenhum volume, talvez para fins de avaliação ou depuração. VOLUME
elimina essa possibilidade, pois não é possível desabilitar montagens automáticas. Isso faz com que muitos volumes redundantes se acumulem no host se os contêineres que usam a instrução forem iniciados regularmente.
Resumo
As instruções VOLUME
do Dockerfile permitem que as montagens de volume sejam definidas no momento da compilação da imagem. Eles garantem que os contêineres inicializados a partir da imagem terão armazenamento de dados persistente disponível, mesmo que o usuário omita o comando docker run
-v
sinalizador.
Esse comportamento pode ser útil para imagens em que a persistência é crítica ou muitos volumes são necessários. No entanto, a instrução VOLUME
também quebra algumas expectativas do usuário e apresenta um comportamento único, portanto, deve ser escrita com cuidado. Fornecer um arquivo do Docker Compose que cria automaticamente os volumes necessários geralmente é uma solução melhor.
- Cristina Kirchner sofre ataque, o suspeito é brasileiro
- Como verificar seu histórico de documentos impressos no Windows 10
descubra mais conteúdo
Google Pixel Watch também tem detecção de queda, mas não até o próximo ano
As melhores xícaras de café aquecidas de 2022
Como automatizar seu iPhone com base na hora, atividade ou localização
"Isso deve ter sido antes do meu tempo"
Por que a NASA enviou Snoopy para a Lua? – Revisão Geek
O que é uma carga fantasma?
O que é volume no Dockerfile?
Os volumes do Docker são uma ferramenta amplamente usada e útil para garantir a persistência de dados ao trabalhar em contêineres. Os volumes do Docker são sistemas de arquivos montados em contêineres do Docker para preservar os dados gerados pelo contêiner em execução .
Preciso de volume no Dockerfile?
Usar VOLUME no Dockerfile é inútil . Se um usuário precisar de persistência, ele fornecerá um mapeamento de volume ao executar o contêiner especificado.
Podemos montar o volume no Dockerfile?
Não é possível usar a instrução VOLUME para dizer ao docker o que montar . Isso quebraria seriamente a portabilidade. Essa instrução informa ao docker que o conteúdo desses diretórios não vai em imagens e pode ser acessado de outros contêineres usando o parâmetro de linha de comando -volumes-from.
Como vejo o volume no Docker?
Você pode usar o comando docker volume ls para exibir uma lista de volumes de dados. Use o comando docker volume inspect para visualizar os detalhes do volume de dados.
Como crio um volume do Docker?
volume docker criar
- Uso. $ docker volume criar [OPÇÕES] [VOLUME]
- Descrição. Cria um novo volume no qual os contêineres podem consumir e armazenar dados.
- Opções. Nome, abreviação.
- Exemplos. Crie um volume e configure o contêiner para usá-lo:
- Comando pai. Comando.
- Comandos relacionados. Comando.
O que é o Docker de volume NFS?
Volumes são diretórios existentes no sistema de arquivos do host montados dentro de um contêiner . Eles podem ser acessados tanto do contêiner quanto do sistema host. O Docker também permite que os usuários montem diretórios compartilhados no sistema de compartilhamento de arquivos remoto NFS.