manuais-e-documentacao-itguys/documentacao conteineres/Nivel_0_Docker_para_Desenvo...

90 lines
3.1 KiB
Markdown

# MANUAL TÉCNICO - DOCKER PARA DESENVOLVEDORES E FERRAMENTAS PORTÁTEIS
**Código:** ITGCLI 0003/26 | **Classificação:** PÚBLICO
**Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}}
## 1. HISTÓRICO DE REVISÃO
> ⚠️ **REGRA DE OURO:**
> 1. **Autor:** João Pedro Toledo Gonçalves.
> 2. **Descrição:** Criação do documento.
| Data | Versão | Descrição | Autor |
| :--- | :--- | :--- | :--- |
| {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves |
## 2. OBJETIVO
Ensinar o desenvolvedor a usar o Docker para rodar ferramentas, bancos de dados e linguagens sem "sujar" o sistema operacional principal, resolvendo o problema de "Na minha máquina funciona".
## 3. PRÉ-REQUISITOS
- [ ] Docker Desktop (Windows/Mac) ou Engine (Linux) instalado.
## 4. CONCEITOS (POR QUE ISSO EXISTE?)
* **Efêmero (`--rm`):** O container nasce, executa e se autodestrói. Zero lixo no disco.
* **Portátil:** Se roda no seu Docker, roda no servidor de produção.
## 5. PASSO A PASSO (EXECUÇÃO)
**Cenário A: Rodando Ferramentas sem Instalar Nada**
> Imagine que você precisa testar um script Python ou Node.js, mas não quer instalar versões específicas na sua máquina.
1. Rode um script Python (One-off):
```bash
# Monta a pasta atual (.) em /app e roda o script
docker run --rm -v $(pwd):/app -w /app python:3.9 python meu_script.py
```
* `--rm`: Remove o container ao terminar.
* `-v`: Disponibiliza seus arquivos locais dentro do container.
2. Acesse um terminal Node.js limpo:
```bash
docker run --rm -it node:18 /bin/bash
```
**Cenário B: Banco de Dados de Desenvolvimento**
> Suba um banco Postgres em segundos, use, e destrua.
1. Comando rápido (Oneliner):
```bash
docker run --rm --name meupostgres -e POSTGRES_PASSWORD=secret -p 5432:5432 postgres:15
```
* Acesse via DBeaver/PgAdmin em `localhost:5432`.
**Cenário C: Ambiente Completo com Compose**
> A melhor forma de padronizar o time. Crie um `docker-compose.yaml` na raiz do projeto.
```yaml
version: '3.8'
services:
app:
build: .
ports: ["3000:3000"]
volumes:
- .:/code # Hot-reload: altera no host, reflete no container
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: root
ports: ["5432:5432"]
```
1. Para iniciar tudo:
```bash
docker compose up
```
## 6. SOLUÇÃO DE PROBLEMAS (TROUBLESHOOTING)
**Problema 1: "Works on my machine" ainda acontece**
* **Causa:** Você está usando volumes (`-v`) que trazem arquivos de config do seu PC para dentro do container.
* **Solução:** Use `.dockerignore` para não copiar arquivos `node_modules` ou `.env` locais durante o build.
**Problema 2: Porta ocupada**
* **Causa:** Você já tem um Postgres instalado no Windows Services.
* **Solução:** Pare o serviço local ou mude a porta do container: `-p 5433:5432`.
## 7. VALIDAÇÃO FINAL
- [ ] Consegue rodar `docker run --rm hello-world` e ele some depois (`docker ps -a`)?
- [ ] Seu time consegue rodar `docker compose up` e ter o ambiente rodando sem configurar nada?