técnica
etapa: foundations
2 min de leitura
Contêineres e imagens
Um contêiner empacota uma aplicação com suas dependências e a executa isolada do host. Uma boa imagem é pequena, determinística e roda como usuário não root.
Docker / PodmanBuildKitTrivyHadolintDivecontainer registries
Como os contêineres funcionam
- Um contêiner é um processo Linux comum com sua própria visão do sistema de arquivos, da rede e da tabela de processos (namespaces) e com recursos limitados (cgroups). Ele compartilha o kernel do host, ao contrário de uma máquina virtual.
- Uma imagem é uma pilha de camadas somente leitura mais metadados. Um contêiner adiciona uma fina camada gravável por cima.
- Um registry armazena imagens por nome e tag; um digest (sha256) identifica o conteúdo exato e nunca muda.
- Contêineres são feitos para ser descartáveis: o estado fica em volumes, bancos de dados ou object storage, não dentro do contêiner.
Um Dockerfile fraco
Problemas: uma tag flutuante muda sem aviso, o diretório inteiro (incluindo .git e .env) é copiado, dependências de desenvolvimento e ferramentas de build vão para produção, não há cache de camadas e o processo roda como root.
FROM node:latest
COPY . .
RUN npm install
EXPOSE 3000
CMD ["node", "server.js"]Um melhor
Use uma base fixada, um build multi-stage, instalação a partir do lockfile, um usuário não root e um arquivo de ignore.
# estágio de build: tem os compiladores e as dependências de desenvolvimento
FROM node:22-slim@sha256:<digest-you-reviewed> AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build && npm prune --omit=dev
# estágio de runtime: só o que a aplicação precisa
FROM node:22-slim@sha256:<digest-you-reviewed>
ENV NODE_ENV=production
WORKDIR /app
COPY --from=build --chown=node:node /app/dist ./dist
COPY --from=build --chown=node:node /app/node_modules ./node_modules
USER node
EXPOSE 3000
HEALTHCHECK CMD node -e "fetch('http://localhost:3000/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
CMD ["node", "dist/server.js"].git
node_modules
.env
*.log
coverageHábitos
- Reconstrua e reimplante regularmente: imagens não se atualizam sozinhas.
- Faça scan das imagens no CI e falhe diante de achados sérios que você possa corrigir.
- Um processo por contêiner, logs para o stdout, configuração por ambiente ou arquivos montados.
- Marque com o commit e faça deploy por digest, para que o rollback seja exato.
- Mantenha as imagens pequenas: menos pacotes, menos vulnerabilidades, pulls mais rápidos.
conexões no mapa
- Fundamentos de Linux e redesé o que um contêiner isolaContêineres e imagens
- Contêineres e imagensé agendado porFundamentos de Kubernetes
atualizado em 14/10/2026 · fontes para aprofundar · reportar erro
em outros domínios
- Containers — imagens e cadeia de suprimentoscloudseca imagem boa e o cluster seguro: duas metades do mesmo problema
Estude antes
Desbloqueia
teste o que entendeu
Carregando perguntas…