Skip to content

NodeJS

Exemplo de Dockerfile multistage para nodejs.

### base ################################

# criando uma imagem base nodejs
FROM node:22-bookworm-slim as base

# updating to prevent security issues during the build
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get autoremove -y && \
    apt-get clean -y && \
    rm -rf /var/lib/apt/lists/*

### builder ################################

# usando a imagem base para fazer o build
FROM base as builder

# definindo diretorio de trabalho
WORKDIR /builder

# copiando projeto para o container
COPY . .

# rodando instalacoes e migracoes
RUN npm ci && \
    npm run build --if-present && \
    chown -R node:node /builder

### production ################################

# usando imagem base para criar a imagem produtiva
FROM base as production

# definindo diretorio de trabalho
WORKDIR /app

# copiando apenas o necessário
COPY package*.json ./
COPY --from=builder /builder/dist ./dist

# instalando modulos node
RUN npm ci --production && \
    npm prune —omit=dev

# definindo que o node vai rodar em producao
ENV NODE_ENV production

# defindindo usuário da execucao
USER node

# expondo porta a app
EXPOSE 3000

# definindo o binario do node como entrypoint
ENTRYPOINT [ "node" ]

# definindo app a ser carregado via CMD
CMD [ "/app/dist/server.js" ]

### end #######################

Exemplo de docker-compose

services:

  backend_postgresql:
    image: postgres:16.3
    container_name: backend_postgresql
    restart: always
    environment:
      - POSTGRES_USER=user_here
      - POSTGRES_PASSWORD=password_here
      - POSTGRES_DB=backend
    ports:
      - 5432:5432
    volumes:
      - ./postgresql:/var/lib/postgres
    networks:
      - backend

  backend_app:
    depends_on:
      - backend_postgresql
    build: .
    container_name: backend_app
    environment:
      - POSTGRES_USER=user_here
      - POSTGRES_PASSWORD=password_here
      - POSTGRES_DB=backend
    restart: always
    ports:
      - 3000:3000
    networks:
      - backend

networks:
  backend: