# syntax=docker/dockerfile:1 # ════════════════════════════════════════════════ # Build stage: install deps and compile Angular app # ════════════════════════════════════════════════ FROM node:22-slim AS builder WORKDIR /app # Layer cache split: deps only (changes rarely) COPY package.json package-lock.json ./ RUN --mount=type=cache,target=/root/.npm \ npm ci # Layer cache split: source (changes often) COPY . . RUN npm run build # ════════════════════════════════════════════════ # Runtime stage: minimal nginx serving static assets # ════════════════════════════════════════════════ FROM nginxinc/nginx-unprivileged:alpine COPY --from=builder /app/dist/reactbin-ui/browser /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \ CMD wget -qO- http://localhost:8080/ || exit 1