## glossário

O que é Docker?

Docker é uma plataforma de containerização que empacota uma aplicação junto com todas as suas dependências — bibliotecas, runtime, configurações — em uma unidade isolada e portátil chamada container. O objetivo é eliminar a frase mais antiga do desenvolvimento: "na minha máquina funciona".

A promessa se cumpre porque o container carrega o ambiente inteiro consigo. O mesmo artefato que você testou no notebook é o que roda em homologação e em produção, bit a bit.

Container não é máquina virtual

A confusão é comum e a diferença é importante. Uma máquina virtual emula hardware e roda um sistema operacional completo, com kernel próprio — o que custa gigabytes e minutos para subir. Um container compartilha o kernel do host e isola apenas o espaço de processos e arquivos, custando megabytes e milissegundos.

  • VM — isolamento mais forte, sobrecarga alta, inicialização em minutos, imagens de gigabytes.
  • Container — isolamento em nível de processo, sobrecarga baixa, inicialização em segundos, imagens de megabytes.

Imagem, container e Dockerfile

Os três conceitos se encaixam assim: o Dockerfile é a receita, a imagem é o bolo pronto e imutável, e o container é uma fatia sendo servida — uma instância em execução daquela imagem. De uma imagem você sobe quantos containers quiser.

Dockerfile em múltiplos estágios: build pesado, imagem final enxuta
# estágio 1 — compila com todas as ferramentas
FROM node:20 AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# estágio 2 — só o necessário para executar
FROM node:20-alpine
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY --from=build /app/node_modules ./node_modules
USER node
EXPOSE 3000
CMD ["node", "dist/server.js"]

Comandos do dia a dia

Ciclo básico de trabalho
docker build -t minha-api:1.0 .        # constrói a imagem
docker run -p 3000:3000 minha-api:1.0  # sobe um container
docker ps                              # lista containers ativos
docker logs -f <id>                    # acompanha os logs
docker exec -it <id> sh                # abre um shell no container
docker compose up -d                   # sobe a stack do projeto

Cuidados que evitam dor de cabeça

Containers são efêmeros: tudo que é escrito dentro deles some quando morrem. Dados que precisam sobreviver vão para volumes ou serviços externos. Além disso, nunca coloque segredos no Dockerfile — eles ficam gravados nas camadas da imagem e são recuperáveis por qualquer um que a baixe. Use variáveis de ambiente ou um gerenciador de segredos. O guia completo está em Docker na programação.

## faq

Perguntas frequentes

Qual a diferença entre Docker e Kubernetes?

Docker cria e executa containers em uma máquina. Kubernetes orquestra containers em muitas máquinas, cuidando de escala, distribuição, recuperação de falhas e rede entre eles. São complementares: normalmente o Kubernetes executa containers construídos com Docker.

Docker funciona bem no Windows e no macOS?

Funciona, mas com uma camada extra: como containers dependem do kernel Linux, o Docker Desktop roda uma máquina virtual leve por baixo. Isso significa desempenho de disco inferior ao Linux nativo, algo perceptível em projetos com muitos arquivos.

Preciso de Docker em projetos pequenos?

Nem sempre. Para um projeto solo com poucas dependências, ele adiciona complexidade sem ganho claro. O valor aparece quando há múltiplos serviços, vários desenvolvedores ou necessidade de paridade estrita entre desenvolvimento e produção.

## leia também

Artigos relacionados