nodejs/Dockerfile.ubi9

77 lines
2.2 KiB
Docker

ARG REGISTRY_URL=docker.io/aprimediet
ARG UBI_VERSION=9.5
FROM ${REGISTRY_URL}/ubi9:${UBI_VERSION}
LABEL maintainer="<Muhamad Aditya Prima> 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 npm@latest && \
npm i -g yarn@latest && \
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"]