Novo: Eficify One em beta aberto. Crie seu primeiro ambiente sem cartão.Conhecer a plataforma →

Docker Compose, Swarm ou Kubernetes: o guia de decisão que vai salvar sua arquitetura

Três Containers flutuando conectados por linhas a diferentes ferramentas: Compose, Swarm e Kubernetes, representando o espectro de orquestração de containers
CompartilharSeguir

A maioria dos times de engenharia toma a decisão errada sobre orquestração de containers no primeiro projeto. Não por falta de informação, mas por seguir o hype: "todo mundo está migrando para Kubernetes, então devemos fazer o mesmo". O resultado é uma infraestrutura sobrevendida que consome 3x mais tempo operacional do que a alternativa correta teria exigido. Vou mostrar exatamente quando usar cada ferramenta, com critérios objetivos e exemplos de configuração real.

A pergunta errada que todo time faz

O debate entre Docker Compose, Swarm e Kubernetes raramente começa com a pergunta certa. Times avançam para Kubernetes porque "é o padrão da indústria", sem avaliar se o problema deles realmente precisa dessa complexidade. Outros ficam presos no Compose achando que "já resolve" quando já estão em produção com 15 serviços e zero resiliência.

A decisão correta depende de três variáveis: escala de infraestrutura, complexidade operacional suportável e maturidade do time para manter o sistema.

flowchart TD
    subgraph Estagio1
        direction TB
        I1["🔧 Desenvolvimento Local"]
        DC["🐳 Docker Compose\nOrquestração Simples"]
        I1 --> DC
    end
    subgraph Decisao1
        D1{Escala\nNecessária?}
    end
    subgraph Estagio2
        direction TB
        I2["📦 Múltiplos Containers"]
        SW["🐝 Docker Swarm\nOrquestração Média"]
        LB["⚖️ Balanceador de Carga"]
        RP["🔄 Réplicas Ativas"]
        I2 --> SW
        SW --> LB
        SW --> RP
    end
    subgraph Decisao2
        D2{Produção\nEnterprise?}
    end
    subgraph Estagio3
        direction TB
        I3["🌐 Alta Disponibilidade"]
        K8s["☸️ Kubernetes\nOrquestração Avançada"]
        ND["🖥️ Múltiplos Nós"]
        CL["📂 Clusters"]
        NS["📦 Namespaces"]
        I3 --> K8s
        K8s --> ND
        K8s --> CL
        K8s --> NS
    end
    DC --> D1
    D1 -->|Sim| I2
    D1 -->|Não| I1
    RP --> D2
    D2 -->|Sim| I3
    D2 -->|Não| SW
    style Estagio1 fill:#1a365d,stroke:#2b6cb0,stroke-width:2px,color:#fff
    style Estagio2 fill:#1a365d,stroke:#2b6cb0,stroke-width:2px,color:#fff
    style Estagio3 fill:#1a365d,stroke:#2b6cb0,stroke-width:2px,color:#fff
    style Decisao1 fill:#2c5282,stroke:#4299e1,stroke-width:2px,color:#fff
    style Decisao2 fill:#2c5282,stroke:#4299e1,stroke-width:2px,color:#fff
    style DC fill:#2b6cb0,stroke:#63b3ed,stroke-width:2px,color:#fff
    style SW fill:#2b6cb0,stroke:#63b3ed,stroke-width:2px,color:#fff
    style K8s fill:#2b6cb0,stroke:#63b3ed,stroke-width:2px,color:#fff
    style I1 fill:#3182ce,stroke:#90cdf4,stroke-width:1px,color:#fff
    style I2 fill:#3182ce,stroke:#90cdf4,stroke-width:1px,color:#fff
    style I3 fill:#3182ce,stroke:#90cdf4,stroke-width:1px,color:#fff
    style LB fill:#3182ce,stroke:#90cdf4,stroke-width:1px,color:#fff
    style RP fill:#3182ce,stroke:#90cdf4,stroke-width:1px,color:#fff
    style ND fill:#3182ce,stroke:#90cdf4,stroke-width:1px,color:#fff
    style CL fill:#3182ce,stroke:#90cdf4,stroke-width:1px,color:#fff
    style NS fill:#3182ce,stroke:#90cdf4,stroke-width:1px,color:#fff
    style D1 fill:#4a5568,stroke:#a0aec0,stroke-width:2px,color:#fff
    style D2 fill:#4a5568,stroke:#a0aec0,stroke-width:2px,color:#fff
Diagrama comparativo mostrando os três estágios de maturidade de orquestração: Docker Compose para desenvolvimento local, Swarm para produção simples, Kubernetes para produção em escala com múltiplas equipes

Docker Compose: o suficiente que vira armadilha

Docker Compose brilha em desenvolvimento local e em produção de baixíssima complexidade. Um ou dois serviços, deploys manuais, sem necessidade de rollbacks automatizados, sem múltiplas regiões. Se isso descreve sua realidade atual, Compose com docker compose up -d resolve.

A armadilha: Compose não tem orquestração real. Não há load balancing interno, não há healing automático, não há gerenciamento de volumes compartilhados entre hosts. Quando seu serviço precisa escalar para duas instâncias e você sobe outro container manualmente, está no caminho para o caos.

version: '3.8'
services:
  api:
    image: minha-api:latest
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    restart: unless-stopped
    # Sem replicas: um ponto único de falha em produção

Compose não tem replica count. Se o container morrer, nada sobe automaticamente. Para produção real, você precisa de pelo menos um supervisor que monitore e recicle. Compose não faz isso.

Docker Swarm: o subestimado

Docker Swarm é o primo ignorado do ecossistema Docker. Estável, simples de operar, integrado nativamente ao Docker e capaz de coisas que muitos times não sabem que precisam.

Swarm te dá de graça:

  • Réplicas nativas e scheduling entre nodes
  • Load balancing interno (mesh routing)
  • Rolling updates com rollback automático
  • Service discovery automático por nome DNS interno
  • Secret management nativo
  • Tudo isso com uma curva de aprendizado de horas, não semanas

version: '3.8'
services:
  api:
    image: minha-api:latest
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    # Réplicas reais com healing automático
    replicas: 3
    update_config:
      parallelism: 1
      delay: 10s
      failure_action: rollback
    restart_policy:
      condition: on-failure
      max_attempts: 3
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 256M

Com esse arquivo, docker stack deploy -c docker-compose.yml minha-app sobe 3 réplicas, distribui entre os nodes disponíveis, faz load balancing e permite updates graduais. Zero configuração externa.

Quando Swarm é suficiente: uma equipe de 1 a 5 engenheiros, menos de 50 serviços, uma ou duas regiões, sem necessidade de políticas complexas de rede ou storage customizado. Times que precisam de resultados rápidos sem operar um plano de controle sofisticado.

Kubernetes: o custo escondido de adotar cedo demais

Kubernetes é extraordinário. Também é operacionalmente caro de um jeito que não aparece na conta do cloud provider.

O custo que ninguém quantifica

Para um cluster Kubernetes funcional em produção, você precisa de:

  • Etapa 1: Control plane (gerenciado reduz trabalho, mas não elimina). EKS, GKE e AKS cobram por API server, etcd e componentes de controle. Um cluster pequeno custa entre US$ 70 e US$ 150 mensais em cloud gerenciado.
  • Etapa 2: Engenheiros que entendam pods, deployments, services, ingress, configmaps, secrets, RBAC, network policies, resource quotas, persistent volumes, storage classes. Não é conhecimento trivial.
  • Etapa 3: CI/CD adaptado (Helm charts ou Kustomize), observabilidade (Prometheus, Grafana, Loki ou equivalente), logging centralizado, service mesh se precisar de mTLS entre serviços.
  • Etapa 4: Tempo de manutenção contínua. Atualizações de cluster, migração de workloads, depuração de pods crashando, diagnose de network policies restritivas demais.

Um time de 3 engenheiros que migra para Kubernetes vai perder entre 30% e 50% da capacidade de entrega de features durante os primeiros 6 meses. Isso é quantificável. Se sua empresa está em modo de crescimento acelerado, esse custo pode ser mais caro que o benefício.

Quando Kubernetes realmente compensa

  • Mais de 50 serviços em produção com dependências complexas de rede
  • Múltiplas equipes precisando de isolamento (namespaces, RBAC, quotas)
  • Compliance e auditoria exigindo controle granular de permissões e logs
  • Multi-cloud ou on-premise necessitando de portabilidade real
  • Service mesh com mTLS, circuit breaking e traffic shaping
  • Auto-scaling fino por métricas customizadas, não apenas CPU/memória

Se você tem 8 serviços stateless, uma equipe de 3 pessoas e um budget apertado, Kubernetes é overengineering. EKS/GKE vão cobrar pelo cluster. Você vai pagar em tempo de engenharia para configurá-lo. E vai pagar novamente quando algo quebrar às 2h da manhã e ninguém souber debugar.

A decisão objetiva

Critério Compose Swarm Kubernetes
Curva de aprendizado Horas Dias Semanas a meses
Réplicas automáticas Não Sim Sim
Load balancing Manual (porta única) Nativo Nativo
Secret management Variáveis de ambiente Nativo (criptografado) Nativo + vault
Atualização gradual Manual Nativa (rollback) Nativa (estratégias)
Multi-node nativamente Não Sim Sim
Service mesh integrado Não Não Não (adiciona Istio/linkerd)
Complexidade operacional Baixa Média Alta
Custo cloud adicional Zero Zero $70-150+/mês cluster
Adequado para prod com 1-2 devs Arriscado Sim Arriscado

Checklist acionável

Antes de decidir, responda com honestidade:

  • Quantos serviços você tem em produção agora? Menos de 10 -> Swarm é suficiente
  • Quantos engenheiros vão operar isso? Menos de 5 -> Swarm reduz cognitive load
  • Você precisa de políticas de rede granulares (zero-trust)? Não -> Swarm
  • Você vai precisar de auto-scaling horizontal baseado em métricas customizadas? Sim -> Kubernetes
  • Você opera em múltiplas clouds e precisa de portabilidade real? Sim -> Kubernetes
  • Seu time já tem experiência com Helm e kubectl? Não -> Investigue o custo real antes

A decisão pragmática

O fluxo ideal para a maioria dos times:

Fase 1 (0 a 20 serviços): Compose para desenvolvimento, Swarm para produção simples. Simples, operável por qualquer engenheiro.

Fase 2 (20 a 50 serviços, 2+ engenheiros de plataforma): Swarm com compose files versionados, monitoring com Prometheus, logs centralizados. Avaliem Kubernetes como opção, mas não migrem só porque sim.

Fase 3 (50+ serviços, múltiplas equipes, requisitos de compliance): Kubernetes com GitOps (ArgoCD ou Flux), service mesh, políticas de rede rigorosas. Aqui ele paga o custo.

O erro mais caro que vejo é pular direto da Fase 1 para a Fase 3 porque o CTO leu um artigo sobre como empresas-grandes usam Kubernetes. A resposta correta para seu contexto provavelmente é simples. Swarm não é falta de sofisticação. É sofisticação apropriada.

Adote complexidade quando o custo de não ter essa complexidade superar o custo de operá-la. Na maioria dos casos, esse momento não chega tão cedo quanto você pensa.


Se sua equipe está avaliando migrar para Kubernetes ou já opera em escala e enfrenta complexidade desnecessária, podemos mapear em 30 minutos onde estão os custos escondidos e o que realmente compensa no seu caso.

Fale com um especialista da Eficify

CompartilharSeguir
Bruno Carrilhos

SOBRE O AUTOR

Bruno Carrilhos

CTO · Eficify

Executivo de tecnologia, cofundador da Eficify, com mais de 20 anos de experiência na criação, evolução e sustentação de soluções digitais. Atua nas áreas de desenvolvimento de software, dados, inteligência artificial, cloud computing, cibersegurança e operações de missão crítica. É bacharel em Ciência da Computação, com formação em Ciência de Dados e Inteligência Artificial e pós-graduação em Segurança da Informação.

VAMOS CONVERSAR

Sua nuvem pode render mais e custar menos.

Conte seu cenário e receba um diagnóstico da sua infraestrutura na nuvem, sem compromisso.

Falar sobre minha cloud