api-controle-saida-loja/Dockerfile

93 lines
2.5 KiB
Docker
Raw Normal View History

# ============================================
# Stage 1: Dependencies
# ============================================
FROM node:24-bookworm-slim AS dependencies
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production --ignore-scripts && \
npm cache clean --force
# ============================================
# Stage 2: Builder
# ============================================
FROM node:24-bookworm-slim AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --ignore-scripts && \
npm cache clean --force
COPY . .
RUN npm run build
# ============================================
# Stage 3: Oracle Instant Client
# ============================================
FROM node:24-bookworm-slim AS oracle-client
RUN apt-get update && \
apt-get install -y --no-install-recommends \
libaio1 \
wget \
unzip \
ca-certificates && \
rm -rf /var/lib/apt/lists/*
RUN mkdir -p /opt/oracle && \
wget --progress=dot:giga \
https://download.oracle.com/otn_software/linux/instantclient/2360000/instantclient-basic-linux.x64-23.6.0.24.10.zip \
-O /tmp/instantclient.zip && \
unzip -q /tmp/instantclient.zip -d /opt/oracle && \
rm /tmp/instantclient.zip && \
mv /opt/oracle/instantclient_* /opt/oracle/instantclient
# ============================================
# Stage 4: Production
# ============================================
FROM node:24-bookworm-slim AS production
LABEL maintainer="Joelson"
LABEL description="API Controle Saída Loja - NestJS + Oracle"
LABEL version="1.0"
RUN apt-get update && \
apt-get install -y --no-install-recommends \
libaio1 \
dumb-init && \
rm -rf /var/lib/apt/lists/* && \
apt-get clean
RUN groupadd -r nodejs && \
useradd -r -g nodejs -s /bin/bash -d /home/nodejs nodejs && \
mkdir -p /home/nodejs && \
chown -R nodejs:nodejs /home/nodejs
COPY --from=oracle-client /opt/oracle/instantclient /opt/oracle/instantclient
ENV LD_LIBRARY_PATH=/opt/oracle/instantclient
ENV ORACLE_HOME=/opt/oracle/instantclient
ENV NODE_ENV=production
ENV NPM_CONFIG_LOGLEVEL=warn
WORKDIR /app
COPY --from=dependencies --chown=nodejs:nodejs /app/node_modules ./node_modules
COPY --from=builder --chown=nodejs:nodejs /app/dist ./dist
COPY --chown=nodejs:nodejs package*.json ./
USER nodejs
EXPOSE 3001
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
CMD node -e "require('http').get('http://localhost:3001/', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
CMD ["node", "dist/main.js"]