DEV Community

Cover image for 🚀 Como Rodar uma API Node.js + PostgreSQL com Docker
Bruno Mestres
Bruno Mestres

Posted on

🚀 Como Rodar uma API Node.js + PostgreSQL com Docker

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
Enter fullscreen mode Exit fullscreen mode

Instale as dependências:

npm install express pg
Enter fullscreen mode Exit fullscreen mode

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"));
Enter fullscreen mode Exit fullscreen mode

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"]
Enter fullscreen mode Exit fullscreen mode

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:
Enter fullscreen mode Exit fullscreen mode

4️⃣ Rodando o Projeto 🚀

Agora é só rodar:

docker compose up -d
Enter fullscreen mode Exit fullscreen mode

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)