O Docker Compose é uma ferramenta poderosa de orquestração projetada para simplificar o gerenciamento e a implantação de aplicativos multi-contêiner usando o Docker. O arquivo docker-compose.yml otimiza a implantação ao definir aplicativos complexos com múltiplos serviços, redes e volumes em um único arquivo. Um dos aspectos essenciais ao trabalhar com o Docker Compose é o gerenciamento de dados persistentes usando volumes.

Este artigo explora a importância do uso de volumes no Docker Compose para lidar com dados persistentes e fornece um guia prático para você usar volumes de forma eficaz.

O que são volumes no Docker?

Volumes no Docker são um componente crucial do ecossistema que armazena e gerencia dados persistentes gerados por contêineres efêmeros. Eles permitem que os dados persistam mesmo após a remoção ou atualização de um contêiner, evitando que dados essenciais do aplicativo sejam perdidos durante operações de rotinas.

Os volumes são independentes do sistema de arquivos do contêiner, permitindo que você os faça backup facilmente, os compartilhe entre vários contêineres e os migre entre hosts.

Uma das principais vantagens de usar volumes em vez de bind mounts, que são montagens de diretório do sistema host para um contêiner, é a portabilidade. Você pode mover rapidamente os volumes entre diferentes hosts ou contêineres, mas precisa vincular as montagens de associação a um diretório específico no sistema host.

Essa portabilidade permite um gerenciamento de dados mais flexível e eficiente em aplicativos baseados em contêineres. Os volumes também são compatíveis com vários drivers de armazenamento, permitindo que você escolha a melhor solução de armazenamento para seu caso de uso específico.

Tipos de volumes do Docker

Os volumes do Docker são essenciais para o gerenciamento de dados em aplicativos baseados em contêineres. Eles vêm em dois tipos distintos: volumes nomeados e volumes anônimos. Esta seção analisa as principais diferenças entre os dois tipos e demonstra como implementá-los para gerenciar dados em seus aplicativos.

Os volumes nomeados e anônimos têm finalidades diferentes e oferecem recursos variados de controle e gerenciamento. Embora os volumes nomeados sejam geralmente preferidos para a maioria dos casos de uso devido aos seus identificadores legíveis por humanos e à facilidade de gerenciamento, é essencial entender como os dois tipos funcionam para maximizar seus benefícios.

Volumes nomeados

Os volumes nomeados têm um nome definido pelo usuário, o que os torna fáceis de identificar, gerenciar e compartilhar entre vários contêineres. O Docker cria e gerencia volumes nomeados e armazena seus dados em um local específico no sistema host. Normalmente, esse local fica no diretório de instalação do Docker com um ID exclusivo correspondente ao nome do volume.

Os volumes nomeados oferecem maior controle e flexibilidade, pois você pode facilmente fazer referência a eles e manipulá-los usando seu identificador legível por humanos.

Para criar um volume nomeado no Docker, execute:

docker volume create my_named_volume

Volumes anônimos

Ao contrário dos volumes nomeados, os volumes anônimos não têm um nome definido pelo usuário. Em vez disso, o Docker os cria automaticamente quando você cria um contêiner e atribui um ID exclusivo ao volume.

Geralmente, é mais difícil gerenciar e armazenar volumes devido à falta de um identificador legível por humanos. Como o Docker os cria automaticamente, é comum usar volumes anônimos para armazenamento temporário. Eles também podem aparecer se você não especificar um volume nomeado ao criar um contêiner.

Para criar um contêiner com um volume anônimo, execute:

docker run -v /data nginx

Esse comando monta um volume anônimo no diretório /data dentro do contêiner nginx. Você pode substituir nginx pelo nome do contêiner no qual está montando o volume.

Como criar e gerenciar volumes com o Docker Compose

O Docker Compose simplifica a criação e o gerenciamento de volumes, permitindo que você os defina no arquivo docker-compose.yml. Esse arquivo contém a configuração dos serviços, redes e volumes do seu aplicativo, permitindo que você gerencie facilmente os recursos do seu aplicativo em um só lugar.

1. Definir volumes no Docker Compose

Para criar um volume nomeado no arquivo docker-compose.yml, você deve defini-lo na chave volumes. Você também pode especificar o driver de volume e as opções, se necessário.

2. Montar volumes em contêineres

Para anexar um volume a um contêiner, use a chave volumes dentro da definição service no arquivo docker-compose.yml. Especifique o nome do volume seguido de dois pontos e o caminho do contêiner onde você deseja montar o volume.

Você também pode compartilhar volumes entre vários contêineres usando o mesmo nome de volume.

Aqui está um exemplo de criação de volumes nomeados chamados web_data e db_data em seu arquivo docker-compose.yml:

version: '3.8'
services:
  web:
    image: nginx
    volumes:
      - web_data:/var/www/html
  web-test:
    image: nginx
    volumes:
      - web_data:/var/www/html # Web and web test share the web_data volume
  db:
    image: mysql
    volumes:
      - db_data:/var/lib/mysql
volumes:
  web_data:
  db_data:
    driver: local # Define the driver and options under the volume name
    driver_opts:
      type: none
      device: /data/db_data
      o: bind

Este exemplo define dois volumes nomeados. Em seguida, ele monta os volumes em seus respectivos contêineres em caminhos específicos. Em seguida, ele monta o volume web_data no diretório /var/www/html no contêiner da web e o volume db_data no diretório /var/lib/mysql no contêiner db.

Os contêineres web e web-test compartilham o volume web_data, o que permite acessar e modificar o mesmo volume de dados.

Ao definir e gerenciar volumes no arquivo docker-compose.yml, você pode facilmente criar, atualizar e excluir volumes conforme necessário, sem gerenciá-los manualmente usando os comandos do Docker. Esse processo simplificado permite que você se concentre no desenvolvimento e na implantação do seu aplicativo, enquanto o Docker Compose lida com o gerenciamento de recursos subjacentes.

Como trabalhar com o Docker Compose e os comandos de volume

O Docker Compose fornece vários comandos que ajudam você a gerenciar efetivamente seu aplicativo e seus recursos. Vamos analisar esses comandos e como eles se relacionam com os volumes em mais detalhes:

  • docker compose up o Docker Compose cria e inicia seu aplicativo, incluindo seus serviços, redes e volumes. Se você definir um volume nomeado no arquivo docker-compose.yml antes que ele exista, esse comando o criará automaticamente.
  • docker compose down interrompe e remove os serviços e as redes do seu aplicativo. Por padrão, ele não remove os volumes nomeados. Para remover volumes nomeados, use o sinalizador --volumes ou -v.
  • docker compose ps lista os contêineres e seu status atual, incluindo informações relacionadas ao volume.
  • docker compose config valida e exibe a configuração efetiva gerada a partir do arquivo docker-compose.yml, incluindo definições de volume.

Listar volumes

Para listar todos os volumes, use ls:

docker volume ls

A saída exibe todos os volumes nomeados, incluindo aqueles criados pelo Docker Compose.

Inspecionar volumes

Para visualizar os detalhes de um volume específico, use inspect . Ele gera informações sobre o volume, como nome, driver, ponto de montagem e opções:

docker volume inspect db_data

Os detalhes do volume são fornecidos no formato JSON. Por exemplo, considerando o arquivo docker-compose.yml fornecido acima, esta é a saída retornada:

[
    {
        "CreatedAt": "some-date-here",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/path/on/host/where/volume/is/mounted",
        "Name": "db_data",
        "Options": {
            "device": "/data/db_data",
            "o": "bind",
            "type": "none"
        },
        "Scope": "local",
        "Status": {
            "Mounts": [
                ...
            ]
        }
    }
]

Remover um volume do Docker por nome

Para remover um volume do Docker, você pode usar docker volume rm seguido do nome do volume:

docker volume rm volume-name

Remover volumes não utilizados

Para remover volumes não utilizados, você pode usar prune:

docker volume prune

Esse comando ajuda a limpar seu ambiente de desenvolvimento e recupera os espaço de armazenamento. Ele remove todos os volumes não utilizados que não estejam associados a contêineres, inclusive aqueles criados pelo Docker Compose.

Ao aproveitar esses comandos e seus recursos relacionados ao volume, você pode gerenciar com eficiência os recursos do seu aplicativo, garantindo o desempenho ideal e o uso eficiente do espaço de armazenamento.

Versões do Docker Compose

A partir de julho de 2023, o Docker Compose V1 parou de receber atualizações. Ele também não está mais disponível em novas versões do Docker Desktop. No entanto, o Docker Desktop continua a oferecer suporte a um alias docker-compose para redirecionar comandos para docker compose por conveniência e compatibilidade aprimorada com ferramentas e scripts de terceiros.

Para mudar qualquer código existente da versão 1 para a versão 2 do Docker Compose, basta substituir o traço por um espaço. Por exemplo, docker-compose up se torna docker compose up.

Com a versão 2, você pode usar o comando &compose diretamente na interface de linha de comando (CLI) do Docker, alternar o contexto do Docker para criar um contêiner em um serviço de nuvem e usar o Amazon ECS e o Microsoft ACI.

Resumo

Este artigo destacou a importância de usar volumes com Docker Compose para gerenciar dados persistentes. Volumes são um componente crucial no ecossistema Docker, permitindo que você armazene e gerencie dados gerados pelos contêineres Docker. Com volumes Docker, dados importantes do aplicativo persistem mesmo após você excluir ou atualizar um contêiner, ajudando a manter a integridade e a consistência do seu aplicativo.

O Docker Compose oferece uma abordagem simplificada para criar e gerenciar volumes dentro do arquivo docker-compose.yml. Esse método simplifica seu processo de desenvolvimento e garante o uso eficiente dos recursos.

O uso de volumes também torna o desenvolvimento flexível e eficiente, com o Docker Compose fornecendo vários comandos relacionados a volumes para ajudar você a supervisionar os recursos do aplicativo com eficiência. O uso desses comandos permite que você crie, inspecione e limpe volumes com facilidade.

Ao hospedar seu aplicativo com a Kinsta, você tem uma infraestrutura rápida, segura e confiável, com seus projetos implantados na rede de nível premium do Google Cloud Platform e nas máquinas C2. Você pode escolher entre os 37 centros de dados e um CDN habilitado para HTTP/3 com 260+ PoPs.

Mantenha-se seguro com a tecnologia de contêineres isolados, dois firewalls fortes e proteção avançada contra DDoS com a tecnologia Cloudflare. Você também pode integrar aplicativos ou automatizar fluxos de trabalho com a API da Kinsta e implantá-los com o Docker.

A Kinsta fornece recursos e conteúdo de alta qualidade para desenvolvedores da web, incluindo tutoriais e guias detalhados para várias linguagens e ferramentas como o Docker Compose. Leia nosso conteúdo específico do Docker no blog da Kinsta para saber mais sobre o Docker.

Marcia Ramos Kinsta

Sou o líder da equipe editorial na Kinsta. Sou um entusiasta de código aberto e adoro programar. Com mais de 7 anos de experiência em redação e edição técnica para a indústria de tecnologia, adoro colaborar com pessoas para criar conteúdos claros e concisos e melhorar fluxos de trabalho.