ARG REGISTRY_URL=docker.io/aprimediet ARG UBI_VERSION=9.5 FROM ${REGISTRY_URL}/ubi9:${UBI_VERSION} LABEL maintainer=" aprimediet@gmail.com" ARG NVM_VERSION=0.40.1 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 # Setup composer user and required directories RUN groupadd -g 10001 nodejs && \ useradd -u 10001 -g 10001 -m -d /app -s /sbin/nologin nodejs && \ 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} # Get latest nvm ADD https://raw.githubusercontent.com/nvm-sh/nvm/v${NVM_VERSION}/install.sh ./ # INSTALL NVM AND DESIGNATED NODE VERSION RUN bash /tmp/install.sh && \ . $NVM_DIR/nvm.sh && \ nvm install v${NODE_VERSION} && \ nvm alias default v${NODE_VERSION} && \ nvm use default 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 global npm cache RUN npm -g config set cache ${NPM_CACHE_DIR} && \ npm config set cache ${NPM_CACHE_DIR} # Install Yarn RUN --mount=type=cache,target=${NPM_CACHE_DIR} \ npm i -g yarn && \ yarn config set cache-folder ${YARN_CACHE_DIR} && \ dnf -y autoremove && \ dnf -y clean all # Set binary simlinks 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 # Clean Caches RUN rm -rf ${NPM_CACHE_DIR}/* && \ rm -rf ${YARN_CACHE_DIR}/* && \ rm -rf ${NVM_DIR}/.cache/bin/* USER nodejs WORKDIR /app CMD ["/usr/bin/node"]