Sobes.tech
Junior

Qual é a diferença entre um volume e um link simples para um diretório no host?

sobes.tech IA

Resposta da IA

  • Volumes: O ciclo de vida do volume é separado do ciclo de vida do contêiner. O Docker gere o armazenamento dos volumes na máquina host. Os volumes são criados, montados e eliminados pelo Docker, e os seus dados permanecem mesmo após a paragem ou eliminação do contêiner. São ideais para armazenamento persistente de dados, bases de dados ou dados partilhados entre contêineres.

  • Montagens diretas a diretórios no host (Bind Mounts): Ligam um diretório ou ficheiro na máquina host diretamente a um diretório ou ficheiro dentro do contêiner. O Docker não gere diretamente o armazenamento de dados, apenas cria um ponto de montagem. As alterações no sistema de ficheiros do contêiner nesse ponto refletem-se na máquina host e vice-versa. São úteis para:

    • Desenvolvimento: Montar código fonte no contêiner para refletir alterações instantaneamente.
    • Configuração: Transferir ficheiros de configuração do host para o contêiner.
    • Acesso a recursos do host: Permitir que o contêiner aceda a ficheiros ou diretórios específicos do host.

Principais diferenças:

Característica Volume (Volume) Montagem no host (Bind Mount)
Gestão O Docker gere completamente o armazenamento O Docker apenas cria o ponto de montagem
Ciclo de vida Separado do contêiner Ligado à existência do diretório/ficheiro do host
Desempenho Otimizado para I/O Depende do desempenho do sistema de ficheiros do host
Portabilidade Mais portátil através de Dockerfile/Compose Menos portátil, depende da estrutura do host
Isolamento Oferece melhor isolamento do host Menos isolado do sistema de ficheiros do host

Exemplo de uso de volume no Dockerfile:

# Uso de volume
VOLUME /app/data

Exemplo de uso de montagem no host ao iniciar o contêiner:

# Montagem de diretório
docker run -v /caminho/no/host:/caminho/no/conteiner minha_imagem

Exemplo de uso de volume ao iniciar o contêiner:

# Uso de volume nomeado
docker run -v meuvoulum:/caminho/no/conteiner minha_imagem