Zum Inhalt springen

Conteinerizei o meu projeto full-stack com o Docker/Docker compose

Fala pessoal! lembra do meu projeto portfólio que estou desenvolvendo? Hoje resolvi conteinerizar ele utilizando o Docker e orquestrando com o Docker Compose.

separei em 2 containes diferentes:

  1. Frontend (React/Vite)
  2. Backend (Node.js/TypeScript)

e configurei da seguinte maneira:

Frontend:

Dockerfile

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 5173
ENV HOST=0.0.0.0
ENV PORT=5173
CMD ["npm", "run", "dev"]

Backend:

Dockerfile

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3001
CMD ["npx", "ts-node", "src/app.ts"]

E na orquestração, fiz da seguinte maneira para que o frontend dependa do backend:

docker-compose.yml

version: '3.8'

services:
  frontend:
    build: 
      context: ./frontend
      dockerfile: Dockerfile
    ports:
      - "5173:5173"
    volumes:
      - ./frontend:/app
      - /app/node_modules
    environment:
      - NODE_ENV=development
    depends_on:
      - backend

  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile
    ports:
      - "3001:3001"
    volumes:
      - ./backend:/app
      - /app/node_modules
    environment:
      - NODE_ENV=development
    env_file:
      - ./backend/.env
    depends_on:
      - postgres

  postgres:
    image: postgres:16-alpine
    ports:
      - "5434:5432"
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./postgres-init:/docker-entrypoint-initdb.d

Agora para rodar o meu projeto é só rodar o docker-compose up. Ficou mais fácil de configurar e o ambiente mais consistente!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert