// stack.lumi
DevOps

Docker

Padronizacao de ambientes com containers.

// o que é

Docker empacota aplicacoes e dependencias em containers, reduzindo diferencas entre desenvolvimento, teste e producao. No contexto da Lumi Data, e base para deploy previsivel de APIs, pipelines e apps.

Docker popularizou a containerização baseada em Linux cgroups e namespaces — mecanismos do kernel que existiam desde 2008 — ao introduzir uma interface de alto nível (Dockerfile, imagens, registry) que tornou o empacotamento de aplicações em ambientes reproduzíveis acessível a desenvolvedores sem expertise em sistemas operacionais. Merkel (2014) documenta como containers Docker resolvem o problema de "funciona na minha máquina" ao encapsular não apenas o código mas o runtime, as dependências e as variáveis de ambiente em uma unidade imutável e versionada. A distinção entre containers e VMs é fundamental: containers compartilham o kernel do host (isolamento via namespaces) enquanto VMs emulam hardware completo (isolamento via hypervisor) — containers iniciam em milissegundos e têm overhead de CPU e memória próximo de zero, VMs iniciam em segundos e consomem GBs de RAM mesmo ociosas. O Open Container Initiative (OCI, 2016) padronizou o formato de imagem e o runtime de container, garantindo que imagens Docker funcionem em Kubernetes, Podman, containerd e qualquer runtime OCI-compatível.

Como a Lumi enxerga:A Lumi cria imagens enxutas, seguras e versionadas, conectadas a CI/CD e observabilidade.
// na prática

Como empresas usam Docker

01

Time de desenvolvimento eliminando inconsistências entre ambientes

Docker Compose define o ambiente de desenvolvimento completo — aplicação, banco de dados, cache, filas — em um único arquivo versionado no repositório. Novos desenvolvedores executam "docker compose up" e têm o ambiente idêntico ao de produção em minutos, sem instalar dependências globais ou resolver conflitos de versão de runtime.

02

Pipeline de CI/CD com builds reproduzíveis

Cada stage do CI (lint, test, build, scan) executa em um container Docker específico para aquela tarefa, garantindo que o ambiente de build seja idêntico em toda execução independentemente do agente de CI. Imagens de build cacheadas no registry reduzem o tempo de pipeline de minutos para segundos para dependências que não mudaram.

03

Empresa migrando aplicações legacy para Kubernetes

Docker é o passo zero da jornada para Kubernetes: cada serviço é containerizado com um Dockerfile otimizado (multi-stage build para imagem mínima, usuário não-root, health check declarado), validado localmente com Docker Compose, e então deployado no cluster. A containerização revela dependências ocultas de ambiente que precisariam ser resolvidas de qualquer forma para operar em produção.

// decisão técnica

Quando usar — e quando não usar

Use quando
  • O time sofre com inconsistências entre os ambientes de desenvolvimento, staging e produção — Docker elimina a categoria inteira de bugs "funciona em staging, quebra em produção"
  • O pipeline de CI/CD precisa de builds reproduzíveis e ambientes de test isolados que não compartilham estado entre execuções
  • A aplicação tem múltiplos serviços com dependências diferentes de runtime (Python 3.9 para um worker, Node 20 para o backend, Redis 7) que conflitariam se instalados globalmente
  • O time está se preparando para Kubernetes — containers são o pré-requisito e a containerização do serviço revela dependências de configuração que precisam ser explicitadas
  • A organização precisa de portabilidade entre cloud providers ou entre on-premise e cloud — imagens Docker rodam identicamente em AWS, GCP, Azure e bare metal
Evite quando
  • Scripts de automação simples e CLIs que rodam uma vez — o overhead de Dockerfile, build e registry não se justifica para ferramentas que executam em um único ambiente controlado
  • O time não tem processo de gestão de imagens (scanning de vulnerabilidades, política de atualização de base images, tagging semântico) — containers com imagens desatualizadas criam superfície de ataque maior que processos diretos no host
  • A aplicação é um monolito legado com dependências de hardware ou drivers específicos (placas de captura de vídeo, dongles de licença, hardware serial) que não funcionam dentro de containers sem privilégios elevados
  • O ambiente de produção é serverless puro (Lambda functions, Cloud Run) e o tamanho da imagem Docker resultaria em cold starts inaceitáveis — imagens pequenas são necessárias ou o formato nativo da plataforma é mais eficiente
// visão lumi

Docker é infraestrutura básica de qualidade, não diferencial técnico: todo projeto Lumi que envolve um serviço com dependências começa com Dockerfile e Docker Compose, sem discussão. O que monitoramos é a qualidade dos Dockerfiles — multi-stage builds para minimizar tamanho de imagem, usuários não-root por padrão, .dockerignore configurado, health checks declarados, e NEVER a tag "latest" em produção. Containers não são desculpa para ignorar segurança: scanning de vulnerabilidades (Trivy, Snyk) é parte do pipeline de CI, e dependências de base image são atualizadas com a mesma regularidade que dependências de código. Para equipes que ainda não containerizaram, o primeiro sprint de IaC sempre inclui a containerização dos serviços existentes.

Lumi escolhe quando

  • Todo serviço com dependências de runtime específicas — qualquer coisa que não seja "abrir o arquivo e executar" precisa de um Dockerfile
  • Ambientes de desenvolvimento compartilhados entre desenvolvedores onde Docker Compose elimina "funciona na minha máquina" como categoria de problema
  • Pipelines de CI/CD onde builds reproduzíveis e environments isolados são requisitos de qualidade
  • Projetos que vão para Kubernetes — Docker é o passo zero obrigatório da jornada de containerização

Lumi não recomenda quando

  • Scripts CLI de uso único e automações simples onde o overhead de container não tem retorno — shell scripts diretos são mais simples e mais rápidos de manter
  • Projetos com imagens Docker sem processo de scanning de vulnerabilidades e atualização de base images — containers desatualizados criam mais risco do que resolvem
// aplicações

Onde essa tecnologia gera valor

01

Ambientes de desenvolvimento

A Lumi conecta essa aplicação ao objetivo de negócio, definindo arquitetura, dados, segurança e indicadores de sucesso antes da implementação.

02

Deploy de APIs e workers

A Lumi conecta essa aplicação ao objetivo de negócio, definindo arquitetura, dados, segurança e indicadores de sucesso antes da implementação.

03

Pipelines de dados

A Lumi conecta essa aplicação ao objetivo de negócio, definindo arquitetura, dados, segurança e indicadores de sucesso antes da implementação.

04

Base para Kubernetes

A Lumi conecta essa aplicação ao objetivo de negócio, definindo arquitetura, dados, segurança e indicadores de sucesso antes da implementação.

// fundamentos

Referências acadêmicas e técnicas

Merkel, D. (2014). Docker: Lightweight Linux Containers for Consistent Development and Deployment. Linux Journal, 2014(239).

Artigo fundacional que documenta Docker como solução para reprodutibilidade de ambientes, descrevendo cgroups, namespaces e o modelo de imagem como fundamentos técnicos.

Bernstein, D. (2014). Containers and Cloud: From LXC to Docker to Kubernetes. IEEE Cloud Computing, 1(3), 81-84.

Contextualiza a evolução de containers Linux (LXC) para Docker e Kubernetes, explicando os tradeoffs de isolamento entre containers e VMs e a progressão para orquestração.

Open Container Initiative. (2016). OCI Image Format Specification. github.com/opencontainers/image-spec.

Especificação que padroniza o formato de imagem de container, garantindo portabilidade entre Docker, Podman, containerd e qualquer runtime OCI-compatível incluindo Kubernetes.

Kim, G., Humble, J., Debois, P., & Willis, J. (2016). The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations. IT Revolution Press.

Contextualiza a containerização como prática fundamental do Segundo Caminho do DevOps (Feedback) — ambientes consistentes reduzem o lead time de detecção de problemas de produção para desenvolvimento.

Beyer, B., Jones, C., Petoff, J., & Murphy, R. (Eds.). (2016). Site Reliability Engineering: How Google Runs Production Systems. O'Reilly Media.

Documenta como containers são a base de sistemas de produção reproduzíveis e como infraestrutura imutável (rebuild em vez de patch) aumenta a confiabilidade operacional.

// tecnologias relacionadas

DevOps

// próximo passo

Quer saber se esse stack faz sentido para você?

A Lumi avalia contexto, dados, equipe, custo e maturidade para recomendar a tecnologia certa e entregar com responsabilidade.