7.3–7.5 · INFRAESTRUTURA E CLOUD

Containers aproximam ambientes; Compose descreve como eles trabalham juntos.

Empacote a aplicação com suas dependências e transforme a execução local em uma configuração explícita.

MODELO MENTAL

Imagem é receita; container é uma execução dessa receita.

Uma imagem reúne filesystem, runtime e instruções. Um container é uma instância isolada criada a partir dela. Docker não substitui o entendimento da aplicação: torna dependências e limites mais visíveis.

Imagem

Artefato imutável criado em camadas e versionado com uma tag.

Container

Processo em execução, com rede, variáveis e armazenamento definidos.

Compose

Arquivo declarativo que conecta serviços, redes e volumes.

PRÁTICA COM CONTEXTO

Descreva a aplicação e seus serviços em arquivos versionados.

  1. Comece por uma imagem base confiável. Mantenha-a atualizada e instale apenas o necessário.
  2. Separe build e execução. A imagem final deve carregar somente o que precisa para rodar.
  3. Use volumes para dados persistentes. O filesystem efêmero de um container não deve guardar dados duráveis.
  4. Execute em ambiente limpo. Valide a imagem antes de considerá-la pronta para outro ambiente.
services:
  app:
    build: .
    ports: ["3000:3000"]
    environment:
      DATABASE_URL: postgres://app:app@db:5432/app
    depends_on: [db]
  db:
    image: postgres:16-alpine

DECISÕES RESPONSÁVEIS

Reprodutibilidade não elimina cuidados de segurança.

Não coloque segredos na imagem. Tokens, senhas e chaves devem ser injetados no ambiente de execução por um mecanismo apropriado, sem aparecer em código, commits ou logs.
PerguntaPor que importa
Os dados precisam sobreviver ao container?Use volume ou serviço de dados adequado; containers são descartáveis.
A imagem contém apenas o necessário?Imagens menores reduzem superfície de ataque e tempo de distribuição.
A equipe consegue reproduzir o ambiente?Compose documenta serviços e suas relações em um único arquivo.