VOLUME

A instrução VOLUME em um Dockerfile é usada para definir pontos de montagem que persistem dados gerados e usados por contêineres Docker. Quando um contêiner é executado, o Docker cria automaticamente volumes conforme especificado, garantindo que os dados armazenados nesses volumes sejam preservados independentemente do ciclo de vida do contêiner.

Sintaxe Básica

VOLUME ["/caminho/no/conteiner"]

Funcionalidades do VOLUME

  • Persistência de Dados: Volumes permitem que dados sejam persistidos além da vida útil do contêiner. Se o contêiner for removido, os dados no volume ainda estarão disponíveis.

  • Compartilhamento de Dados: Volumes podem ser compartilhados entre vários contêineres, facilitando a comunicação e a colaboração entre eles.

  • Isolamento: Volumes são gerenciados pelo Docker, o que garante isolamento entre os dados armazenados no contêiner e no sistema de arquivos do host, aumentando a segurança e a consistência.

Exemplos de Uso

Definir um Volume Simples

FROM mysql:8.0
VOLUME ["/var/lib/mysql"]

Neste exemplo, o diretório /var/lib/mysql dentro do contêiner é declarado como um volume. Esse diretório é onde o MySQL armazena seus dados. Ao definir um volume, você garante que os dados persistirão, mesmo que o contêiner seja recriado.

Definir Múltiplos Volumes

FROM nginx:alpine
VOLUME ["/var/cache/nginx", "/var/log/nginx"]

Aqui, dois diretórios dentro do contêiner são declarados como volumes: /var/cache/nginx e /var/log/nginx. Isso permite que tanto os caches quanto os logs do NGINX sejam persistidos.

Interação com docker run

Ao criar um contêiner a partir de uma imagem que define volumes, você pode sobrepor o comportamento padrão especificando volumes ou bind mounts com a opção -v ou --mount:

Este comando monta o diretório /meu/diretorio do host como o volume /var/lib/mysql no contêiner.

Boas Práticas e Considerações

  • Nomeação e Organização: Defina volumes para diretórios que contenham dados que precisam ser persistidos ou compartilhados, como bancos de dados, arquivos de configuração, ou caches. Mantenha uma estrutura de diretórios clara e organizada dentro do contêiner.

  • Gerenciamento de Volumes: Ao usar volumes, lembre-se de que o Docker gerencia esses volumes de forma independente do contêiner. Para ver os volumes existentes, você pode usar docker volume ls, e para removê-los, docker volume rm.

  • Isolamento de Dados: Volumes são isolados do sistema de arquivos do host, o que garante que mudanças no host não afetem diretamente os dados dentro do contêiner.

  • Persistência por Padrão: Qualquer dado armazenado em um volume não será removido automaticamente quando o contêiner for excluído, o que significa que você precisa gerenciar manualmente a remoção de volumes desnecessários.

Exemplos Avançados

Usando Volumes com Serviços de Banco de Dados

Este Dockerfile declara o diretório de dados do PostgreSQL como um volume. Isso garante que, mesmo que o contêiner do PostgreSQL seja removido ou atualizado, os dados do banco de dados permanecerão intactos.

Usando Volumes para Aplicações Web

Aqui, o diretório /var/www/html onde o código da aplicação web é armazenado, é declarado como um volume. Isso permite que o conteúdo do site seja atualizado sem precisar reconstruir a imagem inteira.

Resumo

  • VOLUME define pontos de montagem para persistência e compartilhamento de dados no Docker.

  • Volumes são gerenciados pelo Docker e podem ser compartilhados entre contêineres, garantindo que dados importantes não sejam perdidos quando os contêineres forem removidos.

  • Use volumes para garantir que dados essenciais, como bancos de dados e arquivos de configuração, sejam preservados e facilmente acessíveis, mesmo entre diferentes contêineres.

Laboratório

O assunto será aprofundado mais a frente

Last updated