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
VOLUMEPersistê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
docker runAo 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
VOLUMEdefine 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