# 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?