FROM ubi9/ubi-minimal EXPOSE 8080 # Add $HOME/node_modules/.bin to the $PATH, allowing user to make npm scripts # available on the CLI without using npm's --global installation mode # This image will be initialized with "npm run $NPM_RUN" # See https://docs.npmjs.com/misc/scripts, and your repo's package.json # file for possible values of NPM_RUN # Description # Environment: # * $NPM_RUN - Select an alternate / custom runtime mode, defined in your package.json files' scripts section (default: npm run "start"). # Expose ports: # * 8080 - Unprivileged port used by nodejs application ENV APP_ROOT=/opt/app-root \ # The $HOME is not set by default, but some applications need this variable HOME=/opt/app-root/src \ NPM_RUN=start \ PLATFORM="el9" \ NODEJS_VERSION=20 \ NPM_RUN=start \ NAME=nodejs ENV SUMMARY="Minimal image for running Node.js $NODEJS_VERSION applications" \ DESCRIPTION="Node.js $NODEJS_VERSION available as container is a base platform for \ running various Node.js $NODEJS_VERSION applications and frameworks. \ Node.js is a platform built on Chrome's JavaScript runtime for easily building \ fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model \ that makes it lightweight and efficient, perfect for data-intensive real-time applications \ that run across distributed devices." \ NPM_CONFIG_PREFIX=$HOME/.npm-global \ PATH=$HOME/node_modules/.bin/:$HOME/.npm-global/bin/:$PATH LABEL summary="$SUMMARY" \ description="$DESCRIPTION" \ io.k8s.description="$DESCRIPTION" \ io.k8s.display-name="Node.js $NODEJS_VERSION Micro" \ io.openshift.expose-services="8080:http" \ io.openshift.tags="builder,$NAME,${NAME}${NODEJS_VERSION}" \ io.openshift.s2i.scripts-url="image:///usr/libexec/s2i" \ io.s2i.scripts-url="image:///usr/libexec/s2i" \ com.redhat.dev-mode="DEV_MODE:false" \ com.redhat.deployments-dir="${APP_ROOT}/src" \ com.redhat.dev-mode.port="DEBUG_PORT:5858" \ com.redhat.component="${NAME}-${NODEJS_VERSION}-minimal-container" \ name="ubi9/$NAME-$NODEJS_VERSION-minimal" \ version="1" \ com.redhat.license_terms="https://www.redhat.com/en/about/red-hat-end-user-license-agreements#UBI" \ maintainer="SoftwareCollections.org " \ help="For more information visit https://github.com/sclorg/s2i-nodejs-container" # nodejs-full-i18n is included for error strings RUN INSTALL_PKGS="nodejs nodejs-nodemon nodejs-full-i18n npm findutils tar which" && \ microdnf -y module disable nodejs && \ microdnf -y module enable nodejs:$NODEJS_VERSION && \ microdnf -y --nodocs --setopt=install_weak_deps=0 install $INSTALL_PKGS && \ node -v | grep -qe "^v$NODEJS_VERSION\." && echo "Found VERSION $NODEJS_VERSION" && \ microdnf clean all && \ rm -rf /mnt/rootfs/var/cache/* /mnt/rootfs/var/log/dnf* /mnt/rootfs/var/log/yum.* COPY ./s2i/bin/ /usr/libexec/s2i RUN chmod +x /usr/libexec/s2i/init-wrapper # Copy extra files to the image. COPY ./root/ / # Drop the root user and make the content of /opt/app-root owned by user 1001 RUN mkdir -p "$HOME" && chown -R 1001:0 "$APP_ROOT" && chmod -R ug+rwx "$APP_ROOT" WORKDIR "$HOME" USER 1001