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: