nodejs/Dockerfile.ubi9-micro

67 lines
2.0 KiB
Docker

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="<Muhamad Aditya Prima> aprimediet@gmail.com"
FROM ${REGISTRY_URL}/ubi9:${UBI_VERSION}-micro AS runtime
LABEL maintainer="<Muhamad Aditya Prima> 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"]