Docker, Docker Compose e Kubernetes
Do zero
Antes dos contêineres de navio, cada carga tinha um formato: sacos, caixas, barris. Carregar um navio era lento e cada porto fazia de um jeito. O contêiner padronizou tudo: não importa o que vai dentro, ele encaixa em qualquer navio, trem ou caminhão.
Em software, o container faz o mesmo: empacota a aplicação com tudo de que ela precisa (bibliotecas, configurações, ambiente de execução) e roda igual no notebook do desenvolvedor, no servidor de homologação e na nuvem. Acaba o “na minha máquina funciona”.
- O Docker é a ferramenta mais conhecida para criar e rodar containers. A receita do container é o Dockerfile; o resultado da receita é a imagem (o molde); cada cópia em execução da imagem é um container.
- O Docker Compose sobe vários containers que trabalham juntos (o portal, o banco, o cache) com um único arquivo.
- O Kubernetes é o gerente do porto: com centenas de containers em dezenas de servidores, ele decide onde cada um roda, reinicia os que caem, aumenta as cópias no pico e troca as versões sem tirar o sistema do ar.
Frase para guardar: Dockerfile é a receita, imagem é o molde, container é o bolo; o Compose junta vários; o Kubernetes orquestra muitos.
Em 1 minuto
- Container × máquina virtual: o container compartilha o kernel do sistema hospedeiro e isola processos, sistema de arquivos e rede com recursos desse kernel, os namespaces e os cgroups (por isso é leve e sobe em segundos); a máquina virtual tem um sistema operacional completo sobre um hipervisor.
- Dockerfile: FROM (imagem base), WORKDIR, COPY, RUN (executa durante o build), ENV, EXPOSE (documenta a porta), USER e CMD ou ENTRYPOINT (o que roda quando o container inicia).
- Imagens são feitas de camadas imutáveis e ficam num registro (como o Docker Hub). Dados que precisam durar vão em volumes.
- Docker Compose: arquivo
compose.yamlcom serviços, redes e volumes;docker compose upsobe tudo. - Kubernetes: Pod (menor unidade, com um ou mais containers), Deployment (mantém N réplicas e faz atualizações graduais), Service (endereço estável e balanceamento), Ingress (entrada HTTP), ConfigMap e Secret (configuração e segredos).
Exemplo concreto: o portal em containers
Dockerfile do portal:
# Imagem base pequena
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
# RUN roda durante o build da imagem
RUN npm ci --omit=dev
COPY . .
# Não roda como root
USER node
# Documenta a porta; não a publica
EXPOSE 3000
# CMD roda quando o container inicia
CMD ["node", "servidor.js"]
(No Dockerfile, comentário só vale em linha própria, começando com #.)
Para rodar: docker build -t portal:1.4 . cria a imagem; docker run -p 8080:3000 portal:1.4 cria um container e publica a porta 3000 do container na porta 8080 da máquina.
compose.yaml, com o portal e o banco:
services:
portal:
image: portal:1.4
ports: ["8080:3000"]
depends_on: [banco]
banco:
image: postgres:16
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/senha_banco
secrets: [senha_banco]
volumes: ["dados:/var/lib/postgresql/data"]
volumes:
dados:
secrets:
senha_banco:
file: ./senha_banco.txt # fora do Git
Kubernetes, com três réplicas do portal:
apiVersion: apps/v1
kind: Deployment
metadata:
name: portal
spec:
replicas: 3
selector:
matchLabels: { app: portal }
template:
metadata:
labels: { app: portal }
spec:
containers:
- name: portal
image: registro.tce.local/portal:1.4
ports: [{ containerPort: 3000 }]
Aplicado com kubectl apply -f portal.yaml, o Kubernetes cria os Pods e, se um cair, cria outro para manter as três réplicas. Um Service dá um endereço único para os três Pods e distribui as requisições entre eles.
Comparação: VM, container, Compose e Kubernetes
| Máquina virtual | Container | |
|---|---|---|
| O que isola | Um sistema operacional inteiro | Processos, arquivos e rede, sobre o mesmo kernel |
| Tamanho | Gigabytes | Megabytes |
| Inicialização | Minutos | Segundos |
| Base | Hipervisor | Motor de containers (namespaces e cgroups do Linux) |
| Ferramenta | Escala | Para quê |
|---|---|---|
| Docker | Um container | Construir imagens e rodar containers |
| Docker Compose | Vários containers numa máquina | Ambiente de desenvolvimento ou sistemas pequenos |
| Kubernetes | Muitos containers em muitos servidores (cluster) | Produção: alta disponibilidade, escala e atualizações sem parada |
| Objeto do Kubernetes | Função |
|---|---|
| Pod | Menor unidade implantável; um ou mais containers que compartilham rede e volumes |
| Deployment | Estado desejado (imagem, réplicas); faz atualização gradual (rolling update) e rollback |
| Service | Endereço estável e balanceamento entre os Pods |
| Ingress | Regras de entrada HTTP e HTTPS (domínios e caminhos) |
| ConfigMap e Secret | Configurações e dados sensíveis fora da imagem |
| Namespace | Separação lógica dentro do cluster |
| HorizontalPodAutoscaler | Aumenta ou reduz réplicas conforme o uso |
O plano de controle do cluster (API server, etcd, scheduler e controladores) decide e guarda o estado; nos nós, o kubelet roda os containers.
Como a FCC cobra
Diferença entre imagem e container e entre container e máquina virtual, instruções do Dockerfile (CMD × RUN, EXPOSE × publicação de porta) e os objetos básicos do Kubernetes (Pod, Deployment e Service).
- Container × VM (kernel compartilhado).
- Instruções do Dockerfile e o que cada uma faz.
- Para que serve o Docker Compose.
- Pod, Deployment, Service, Ingress, ConfigMap e Secret.
- Autorreparo e escalonamento no Kubernetes.
Pegadinhas
- “Cada container tem o seu próprio kernel.” Falso: compartilha o kernel do hospedeiro; quem tem kernel próprio é a VM.
- “EXPOSE publica a porta para acesso externo.” Falso: só documenta; quem publica é o
-p(ouportsno Compose). - “RUN executa o comando quando o container inicia.” Falso: RUN roda no build da imagem; CMD ou ENTRYPOINT rodam ao iniciar.
- “A menor unidade do Kubernetes é o container.” Falso: é o Pod.
- “Dados gravados dentro do container ficam guardados para sempre.” Falso: somem com o container; use volumes.
- “Secret no Kubernetes é cifrado por padrão em qualquer cluster.” Falso: por padrão é só codificado em Base64; a cifragem em repouso precisa ser configurada.
Explique com suas palavras
Explique a um colega a diferença entre imagem, container, Docker Compose e Kubernetes, usando uma analogia sua.
- Escreva sem olhar a lição, com frases curtas e um exemplo seu.
- Onde travar ou precisar de jargão, há uma lacuna: releia só essa parte.
- Compare com a explicação-modelo e reescreva o que faltou.
Fica salva neste navegador.
Comparar com uma explicação-modelo
A imagem é como a fôrma e a receita de um bolo: define tudo o que vai dentro e não muda. O container é cada bolo feito com aquela fôrma, rodando de verdade. Dá para fazer vários bolos iguais com a mesma fôrma.
O Docker Compose é a lista do jantar: diz quais pratos sobem juntos (o portal, o banco, o cache) e como se ligam, numa mesma cozinha. O Kubernetes é o gerente de um restaurante com várias cozinhas: decide em qual cozinha cada prato é feito, refaz o prato que caiu no chão e aumenta a produção quando o restaurante enche.
Teste-se
DevOps · Docker e Kubernetes · Inédita, estilo FCC
Questão 1 de 3
Em relação às máquinas virtuais, os containers são mais leves e iniciam mais rapidamente porque
A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.
Toque longo numa alternativa para riscá-la.
DevOps · Docker e Kubernetes · Inédita, estilo FCC
Questão 2 de 3
Num Dockerfile, a instrução EXPOSE 3000 foi incluída, mas a aplicação não ficou acessível na máquina hospedeira. Isso ocorre porque a instrução EXPOSE
A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.
Toque longo numa alternativa para riscá-la.
DevOps · Docker e Kubernetes · Inédita, estilo FCC
Questão 3 de 3
No Kubernetes, a menor unidade implantável, que agrupa um ou mais containers que compartilham rede e volumes, é o
A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.
Toque longo numa alternativa para riscá-la.
Mais duas questões deste tópico estão em Questões.
Flashcards gerados
| Frente | Verso |
|---|---|
| Imagem × container | A imagem é o molde imutável, em camadas; o container é uma instância da imagem em execução. |
| RUN × CMD no Dockerfile | RUN executa durante o build da imagem; CMD define o que roda quando o container inicia. |
| Service no Kubernetes | Endereço estável que distribui as requisições entre os Pods de uma aplicação. |
| Onde guardar dados que precisam sobreviver ao container? | Em volumes; o sistema de arquivos do container some com ele. |
| Boas práticas de imagem | Imagem base mínima, usuário sem privilégio de root, sem segredos dentro e varredura de vulnerabilidades no pipeline. |
Ligação com o estudo de caso
Num caso de API em containers na nuvem, proponha: imagem mínima, sem rodar como root e sem segredos dentro dela; varredura da imagem no pipeline; Kubernetes com várias réplicas, atualização gradual e escalonamento automático; segredos em Secret (com cifragem em repouso) ou num cofre; e banco com volume persistente e backup.
Fontes da lição
- Edital nº 01/2026, Anexo II, DevOps, Plataforma de Desenvolvimento e Engenharia de Entrega (fontes/edital-01-2026.txt).
- Referência do Dockerfile
- Documentação do Docker Compose
- Conceitos do Kubernetes
Claude explica
Tire dúvidas sobre este tema no Claude: o site copia o pedido com a lição e abre uma conversa nova, na sua conta. Confira na fonte qualquer fato de lei ou de norma.
Pratique fora do site
Faça questões da FCC sobre este tópico no QConcursos ou no Gran e registre aqui quantas fez: elas contam na meta da semana e no status do tópico.