Hoje, vou compartilhar um exemplo prático e direto para quem quer aprender Docker: subir uma API Node.js conectada ao PostgreSQL sem precisar instalar o banco localmente.
Se você já perdeu tempo configurando dependências no seu ambiente ou precisa garantir que tudo funcione igual em qualquer máquina, Docker é a solução!
📌 Estruturando o Projeto
Criamos dois containers:
🔹 App Node.js para servir uma API
🔹 Banco PostgreSQL para armazenar os dados
📦 meu-projeto-docker
┣ 📂 src
┃ ┣ 📜 main.ts
┣ 📜 Dockerfile
┣ 📜 docker-compose.yml
┣ 📜 package.json
1️⃣ Criando a API Node.js
Dentro do projeto, inicialize o package.json:
npm init -y
Instale as dependências:
npm install express pg
Agora, crie src/main.ts:
import express from "express";
import pg from 'pg'
const { Pool } = pg
const app = express();
const pool = new Pool({
user: "postgres",
host: "db",
database: "meubanco",
password: "postgres",
port: 5432,
});
app.get("/", async (req, res) => {
const response = await pool.query("SELECT NOW()");
res.send(`Banco conectado! Hora atual: ${response.rows[0].now}`);
});
app.listen(3000, () => console.log("API running on port 3000"));
2️⃣ Criando o Dockerfile
Esse arquivo define a imagem da nossa API:
Dockerfile
FROM node:23
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "src/main.ts"]
3️⃣ Configurando o Docker Compose
Aqui criamos os serviços da API e do PostgreSQL.
docker-compose.yml
version: "3.8"
services:
db:
image: postgres:15
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: meubanco
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
app:
build: .
restart: always
depends_on:
- db
ports:
- "3000:3000"
volumes:
- .:/app
volumes:
pgdata:
4️⃣ Rodando o Projeto 🚀
Agora é só rodar:
docker compose up -d
E acessar a API em:
http://localhost:3000
Enfim, com Docker, garantimos que nosso ambiente seja consistente, evitando aqueles famosos "na minha máquina funciona".
Esse foi só o começo! Podemos evoluir esse setup com migrations, CI/CD e Kubernetes. Se quiser mais conteúdos como esse, comenta aí! 👇🔥
Top comments (0)