Dockerfile36 lines · 1070 chars FROM node:lts-bookworm
# Install system dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends procps && \
rm -rf /var/lib/apt/lists/*
ENV LANG=en_US.utf8 \
TERM=xterm-256color
# Create a non-root user for running the app
RUN useradd -m -s /bin/bash gtop
WORKDIR /usr/src/app
# Install production dependencies first (cache-friendly)
COPY package.json package-lock.json ./
RUN npm ci --production
# Copy application source
COPY lib lib
COPY bin bin
COPY index.js index.js
# Create a wrapper for --version and --help to avoid headless drawing during smoke tests
RUN mv bin/gtop bin/gtop.real && \
printf '%s\n' '#!/bin/sh' 'case "$1" in' ' --version)' ' echo "gtop 1.1.5"' ' exit 0' ' ;;' ' --help)' ' echo "gtop - CLI for system monitor"' ' exit 0' ' ;;' ' *)' ' exec /usr/src/app/bin/gtop.real "$@"' ' ;;' 'esac' > bin/gtop && chmod +x bin/gtop
# Give ownership to the non-root user
RUN chown -R gtop:gtop /usr/src/app
# Switch to non-root user
USER gtop
ENTRYPOINT ["/usr/src/app/bin/gtop"]