Docker Compose: Orquestrando Contêineres com Eficiência

Configurar múltiplos contêineres de forma coordenada pode ser fundamental para rodar aplicações complexas, onde cada serviço (banco de dados, cache, API etc.) roda em um contêiner distinto, mas todos precisam se comunicar entre si. O Docker ComposeIntrodução ao Docker Compose: conceitos e benefíciosIntrodução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção. oferece uma forma simples e poderosa de descrever toda essa orquestração em um único arquivo YAML, permitindo criar, escalar e gerenciar diversos serviços simultaneamente.

Neste tutorial, você aprenderá a:

Visão Geral e Objetivos🔗

O grande benefício do Docker ComposeIntrodução ao Docker Compose: conceitos e benefíciosIntrodução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção. é a declaração única de todos os serviços, possibilitando:

  • Versionar a configuração juntando todo o ambiente em um repositório.
  • Integrar ferramentas de CI/CD e pipelines de build de maneira prática.
  • Escalar serviços específicos sem reescrever a lógica de cada container.

Ao final, você terá uma aplicação web (como exemplo) e um banco de dados rodando de forma coordenada, com estrutura de rede, volumes para persistência e whole stack gerenciado via Docker ComposeIntrodução ao Docker Compose: conceitos e benefíciosIntrodução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção..

Estrutura do Arquivo docker-compose.yaml🔗

O arquivo padrão é o docker-composeVolumes em Docker: conceitos e configuraçõesVolumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas..yaml ou docker-compose.ymlAutomatizando a implantação de ambientes com Docker ComposeAutomatizando a implantação de ambientes com Docker ComposeDescubra como automatizar a implantação de ambientes com Docker Compose, garantindo consistência, escalabilidade e agilidade no desenvolvimento., onde definimos:

Um esboço comum ficaria assim:

version: "3.9"
services:
  servico1:
    image: nome-da-imagem:tag
    ports:
  • "8080:80"
environment:
  • VARIAVEL=valor
networks:
  • minha-rede
volumes: servico2: image: outro-servico:tag environment:
  • OUTRA_VARIAVEL=valor
depends_on:
  • servico1
networks:
  • minha-rede
volumes: meu-volume: networks: minha-rede: driver: bridge

Principais Campos

  • version

Define a versão do schema do Docker ComposeIntrodução ao Docker Compose: conceitos e benefíciosIntrodução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção.. Versões mais recentes suportam recursos avançados, como configs e secrets integrados.

  • services

Cada chave logo abaixo de services define um contêiner. Podemos configurar:

  • volumesVolumes em Docker: conceitos e configuraçõesVolumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas.
  • Definições de volumesVolumes em Docker: conceitos e configuraçõesVolumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas. nomeados. São úteis para persistir dadosVolumes em Docker: conceitos e configuraçõesVolumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas..

    • networks

    Permitem criar redes específicas para controle de isolamentoCriando redes personalizadas em Docker: passo a passoCriando redes personalizadas em Docker: passo a passoAprenda como criar e gerenciar redes Docker personalizadas para isolar containers, controlar endereços IP e otimizar a comunicação em sua aplicação. e comunicação entre serviços.

    Exemplo Prático: Web + Banco de Dados🔗

    Suponha que você queira desenhar um ambiente simples com:

    Abaixo, um arquivo básico docker-composeVolumes em Docker: conceitos e configuraçõesVolumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas..yaml:

    version: "3.9"
    services:
      web:
        image: node:18
        container_name: webapp
        working_dir: /app
        volumes:
    
    • ./app:/app
    command: bash -c "npm install && npm start" ports:
    • "3000:3000"
    depends_on:
    • db
    networks:
    • app-network
    db: image: postgres:15 container_name: database environment:
    • POSTGRES_USER=user
    • POSTGRES_PASSWORD=senha123
    • POSTGRES_DB=meubanco
    volumes:
    • db-data:/var/lib/postgresql/data
    networks:
    • app-network
    volumes: db-data: networks: app-network: driver: bridge

    Passo a Passo

    1. Crie um diretório para seu projeto.

    2. Salve o arquivo acima como docker-composeVolumes em Docker: conceitos e configuraçõesVolumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas..yaml dentro desse diretório.

    3. Adapte conforme as versões e configurações necessárias para sua aplicação.

    Então, para subir esse stack:

    docker compose up -d
    Dica: Caso seu Docker Compose ainda seja executado via docker-compose (traço), utilize docker-compose up -d.

    O comando acima faz o build (se houver) e inicia os contêineres em segundo plano (-d). Para checar os logs:

    docker compose logs -f

    E para encerrar e remover os contêineres, redes e volumesVolumes em Docker: conceitos e configuraçõesVolumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas. anônimos gerados:

    docker compose down
    Se quiser remover também volumes nomeados, use a flag -v:
    bash
    docker compose down -v

    Escalando Serviços🔗

    Em cenários de demanda crescente, é possível replicar apenas um serviço usando:

    docker compose up --scale web=3 -d

    O Compose cria 3 contêineres do serviço web, compartilhando a mesma imagem, rede e demais configurações. Assim, é fácil aumentar ou diminuir a capacidade de processamento da aplicação.

    Melhores Práticas🔗

    1. Nomear cada contêiner com container_name, principalmente para facilitar identificação de logs.

    2. Utilizar variáveis de ambienteAutomatizando a implantação de ambientes com Docker ComposeAutomatizando a implantação de ambientes com Docker ComposeDescubra como automatizar a implantação de ambientes com Docker Compose, garantindo consistência, escalabilidade e agilidade no desenvolvimento. externas (ex.: arquivos .env) para separar configurações de credenciais do código.

    3. Organizar o arquivo docker-composeVolumes em Docker: conceitos e configuraçõesVolumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas..yaml por serviços, volumesVolumes em Docker: conceitos e configuraçõesVolumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas. e redes de forma clara, usando comentários e nomes consistentes.

    4. Manter versões compatíveis do Docker e do Compose. Em 2025, é comum encontrar a CLI DockerDocker vs Máquinas Virtuais: principais diferenças e casos de usoDocker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos. unificada (docker composeIntrodução ao Docker Compose: conceitos e benefíciosIntrodução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção.) com suporte a diversos recursos recentes.

    5. Verificar a possibilidade de separar configurações de desenvolvimento, homologação e produção em múltiplos arquivos Compose (por exemplo, docker-composeVolumes em Docker: conceitos e configuraçõesVolumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas..dev.yml ou docker-composeVolumes em Docker: conceitos e configuraçõesVolumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas..prod.yml), mesclando-os quando necessário.

    6. Documentar bem as portas, redes e volumes usados, para que todos compreendam a arquiteturaDocker vs Máquinas Virtuais: principais diferenças e casos de usoDocker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos..

    Conclusão🔗

    O Docker ComposeIntrodução ao Docker Compose: conceitos e benefíciosIntrodução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção. se mostra essencial para a configuração e gestão de aplicações que dependem de múltiplos contêineres interligados. Seu arquivo YAML centraliza toda a definição de serviços, redes e volumesVolumes em Docker: conceitos e configuraçõesVolumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas., além de viabilizar ajustes rápidos e escalonamento eficiente. Com as práticas sugeridas, desenvolvedores, equipes de DevOps e administradores de sistemas podem alinhar suas aplicações e infraestruturas de modo consistente, seguro e manutenível em 2025 e nos anos seguintes.

    Destaque: Em um só arquivo docker-compose.yaml, você descreve toda a arquitetura, facilitando o versionamento, a colaboração entre equipes e a implantação automatizada nos mais diversos ambientes.
    Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

    Referências🔗

    Compartilhar artigo

    Artigos Relacionados