90 lines
3.1 KiB
Markdown
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?
|