ARG REGISTRY_URL=docker.io/aprimediet ARG UBI_VERSION=9.5 ARG NODE_VERSION=22.12.0 FROM ${REGISTRY_URL}/nodejs:${NODE_VERSION}-ubi9 AS builder LABEL maintainer=" aprimediet@gmail.com" FROM ${REGISTRY_URL}/ubi9:${UBI_VERSION}-micro AS runtime LABEL maintainer=" aprimediet@gmail.com" ARG NODE_VERSION=22.12.0 USER root WORKDIR /tmp # Set Cache Directory ENV NVM_DIR=/usr/local/share/nvm ENV NODE_DIR=/usr/local/share/nodejs ENV NPM_CACHE_DIR=${NODE_DIR}/.npm-cache ENV YARN_CACHE_DIR=${NODE_DIR}/.yarn-cache # Create user and group and required directories RUN echo "nodejs:x:10001:" >> /etc/group && \ echo "nodejs:x:10001:10001:nodejs:/app:/sbin/nologin" >> /etc/passwd && \ echo "nodejs:!!:20070::::::" >> /etc/shadow && \ mkdir -p /app && \ mkdir -p ${NVM_DIR} && \ mkdir -p ${NPM_CACHE_DIR} && \ mkdir -p ${YARN_CACHE_DIR}/repo && \ chown -R nodejs:nodejs ${NPM_CACHE_DIR} && \ chown -R nodejs:nodejs ${YARN_CACHE_DIR} && \ chown -R nodejs:nodejs /app # Copy required libs COPY --from=builder \ /usr/lib64/libstdc* \ /usr/lib64 # Copy nvm dir COPY --from=builder /usr/local/share/nvm /usr/local/share/nvm # Set node env ENV NODE_PATH=$NVM_DIR/versions/node/v${NODE_VERSION}/lib/node_modules ENV PATH=$PATH:$NVM_DIR/versions/node/v${NODE_VERSION}/bin # Set binary simlinks and set global npm cache RUN ln -ns $NVM_DIR/versions/node/v${NODE_VERSION}/bin/corepack \ /usr/bin/corepack && \ ln -ns $NVM_DIR/versions/node/v${NODE_VERSION}/bin/node \ /usr/bin/node && \ ln -ns $NVM_DIR/versions/node/v${NODE_VERSION}/bin/npm \ /usr/bin/npm && \ ln -ns $NVM_DIR/versions/node/v${NODE_VERSION}/bin/npx \ /usr/bin/npx && \ ln -ns $NVM_DIR/versions/node/v${NODE_VERSION}/bin/yarn \ /usr/bin/yarn && \ ln -ns $NVM_DIR/versions/node/v${NODE_VERSION}/bin/yarnpkg \ /usr/bin/yarnpkg && \ npm -g config set cache ${NPM_CACHE_DIR} && \ npm config set cache ${NPM_CACHE_DIR} USER nodejs WORKDIR /app CMD ["/usr/bin/node"]