Aula 13: Contêineres com Docker 📦
🎯 Nossa Missão
- Resolver o problema "na minha máquina funciona".
- Entender a tecnologia de contêineres.
- Dominar Dockerfiles e Imagens.
- Orquestração local com Docker Compose.
😫 O Conflito de Versões
- Projeto A precisa de Node 14.
- Projeto B precisa de Node 18.
- Seu computador vira uma bagunça de versões conflitantes.
- O Docker isola tudo isso.
🐳 O que é o Docker?
Não é uma máquina virtual! * Contêiner: Um processo isolado que compartilha o kernel do S.O. * Imagem: O "molde" ou fotografia do sistema pronto. * Docker Hub: Onde baixamos as imagens prontas.
⚖️ VM vs Contêiner
mermaid graph TD subgraph VM [Maquina Virtual] OS1[OS Hospedeiro] --- Hyp[Hypervisor] Hyp --- GOS[Guest OS] GOS --- App1[App + Libs] end subgraph CT [Conteiner] OS2[OS Hospedeiro] --- DE[Docker Engine] DE --- App2[App + Libs] end * Contêineres são muito mais leves e rápidos.
📜 O Dockerfile: A Receita
# 1. Base (Qual S.O.?)
FROM node:20-alpine
# 2. Pasta de trabalho
WORKDIR /app
# 3. Copiar arquivos
COPY . .
# 4. Instalar dependencias
RUN npm install
# 5. Comando de inicio
CMD ["npm", "start"]
🛠️ Comandos Essenciais (Build)
docker build -t meu-app .: Criar a imagem.docker images: Listar imagens no PC.docker rmi <id>: Deletar imagem.
🚀 Comandos Essenciais (Run)
docker run -p 8080:80 meu-app: Rodar o app.docker ps: Ver o que está rodando.docker stop <id>: Parar o contêiner.docker exec -it <id> sh: Entrar no contêiner.
🔗 Mapeamento de Portas
8080:80 * 8080: Porta do seu computador (Host). * 80: Porta dentro do Docker (Container). * Permite acessar o serviço via browser no seu PC.
📂 Volumes: Persistência de Dados
Contêineres são efêmeros (se deletar, os dados somem). * Volumes conectam uma pasta do seu HD à pasta do Docker. * Os dados sobrevivem mesmo se o contêiner for destruído.
🗺️ Docker Compose: O Maestro Local
E se eu precisar de uma API + Banco de Dados? * Arquivo docker-compose.yml. * Define todos os serviços e suas redes. * Comando: docker-compose up.
🏗️ Exemplo de Docker Compose
services:
web:
build: .
ports: ["3000:3000"]
db:
image: postgres:alpine
environment:
POSTGRES_PASSWORD: root
🌐 Redes no Docker (Networks)
- Contêineres podem falar uns com os outros pelo nome.
- Isolamento de tráfego para maior segurança.
🦁 Otimizando Imagens
- Use imagens
alpine(ultra leves). - Evite instalar ferramentas desnecessárias na imagem.
- Use
.dockerignorepara não copiar onode_moduleslocal.
🛡️ Segurança no Docker
- Não rode o app como usuário
rootdentro do Docker. - Mantenha suas imagens base sempre atualizadas.
- Use ferramentas de scan de vulnerabilidades.
📉 Ciclo de Desenvolvimento Docker
mermaid graph LR C[Código] --> B[Build Image] B --> R[Run Container] R --> T[Test] T --> P[Push to Hub]
🌟 O Futuro: DevContainers
- Use o Docker para configurar seu ambiente de VS Code.
- Todo o time usa exatamente as mesmas extensões e ferramentas.
🏆 Checklist de Docker Pro
- Entende a diferença entre Imagem e Contêiner.
- Sabe escrever um Dockerfile básico.
- Consegue rodar um banco de dados via Docker.
- Entende para que serve o Docker Compose.
📝 Prática de Hoje
- Criar um Dockerfile para um site estático.
- Fazer o Build e conferir o tamanho da imagem.
- Rodar o contêiner e acessar via navegador.
🏁 Dúvidas?
Contêineres mudaram o mundo do software! 🚀📦