73 lines
3.1 KiB
Docker
73 lines
3.1 KiB
Docker
|
# Originally from: https://github.com/devcontainers/images/blob/main/src/javascript-node/.devcontainer/Dockerfile
|
||
|
# Which depends on: https://github.com/nodejs/docker-node/blob/main/Dockerfile-debian.template
|
||
|
# [Choice] Node.js version (use -bullseye variants on local arm64/Apple Silicon): 18, 16, 14, 18-bullseye, 16-bullseye, 14-bullseye, 18-buster, 16-buster, 14-buster
|
||
|
ARG VARIANT=18-bullseye
|
||
|
FROM node:${VARIANT}
|
||
|
|
||
|
# Set these args to change the uid/gid for the base container's "node" user to match that of the host user (so bind mounts work as expected).
|
||
|
ARG CERC_HOST_UID=1000
|
||
|
ARG CERC_HOST_GID=1000
|
||
|
# Make these values available at runtime to allow a consistency check.
|
||
|
ENV HOST_UID=${CERC_HOST_UID}
|
||
|
ENV HOST_GID=${CERC_HOST_GID}
|
||
|
|
||
|
ARG USERNAME=node
|
||
|
ARG NPM_GLOBAL=/usr/local/share/npm-global
|
||
|
|
||
|
# Add NPM global to PATH.
|
||
|
ENV PATH=${NPM_GLOBAL}/bin:${PATH}
|
||
|
|
||
|
SHELL ["/bin/bash", "-c"]
|
||
|
|
||
|
RUN \
|
||
|
# Don't switch container uid/gid if the host uid/gid is 1000 (which means it's already correct),
|
||
|
# or root (which won't work anyway) or <= 100 (which also won't work).
|
||
|
if [[ ${CERC_HOST_GID} -ne 1000 && ${CERC_HOST_GID} -ne 0 && ${CERC_HOST_GID} -gt 100 ]]; then \
|
||
|
groupmod -g ${CERC_HOST_GID} ${USERNAME}; \
|
||
|
fi \
|
||
|
&& if [[ ${CERC_HOST_UID} -ne 1000 && ${CERC_HOST_UID} -ne 0 && ${CERC_HOST_UID} -gt 100 ]]; then \
|
||
|
usermod -u ${CERC_HOST_UID} -g ${CERC_HOST_GID} ${USERNAME} && chown ${CERC_HOST_UID}:${CERC_HOST_GID} /home/${USERNAME}; \
|
||
|
fi
|
||
|
|
||
|
# Prevents npm from printing version warnings
|
||
|
ENV NPM_CONFIG_UPDATE_NOTIFIER=false
|
||
|
|
||
|
RUN \
|
||
|
# Configure global npm install location, use group to adapt to UID/GID changes
|
||
|
if ! cat /etc/group | grep -e "^npm:" > /dev/null 2>&1; then groupadd -r npm; fi \
|
||
|
&& usermod -a -G npm ${USERNAME} \
|
||
|
&& umask 0002 \
|
||
|
&& mkdir -p ${NPM_GLOBAL} \
|
||
|
&& touch /usr/local/etc/npmrc \
|
||
|
&& chown ${USERNAME}:npm ${NPM_GLOBAL} /usr/local/etc/npmrc \
|
||
|
&& chmod g+s ${NPM_GLOBAL} \
|
||
|
&& npm config -g set prefix ${NPM_GLOBAL} \
|
||
|
&& su ${USERNAME} -c "npm config -g set prefix ${NPM_GLOBAL}" \
|
||
|
# Install eslint
|
||
|
&& su ${USERNAME} -c "umask 0002 && npm install -g eslint" \
|
||
|
&& npm cache clean --force > /dev/null 2>&1
|
||
|
|
||
|
# [Optional] Uncomment this section to install additional OS packages.
|
||
|
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
|
||
|
&& apt-get -y install --no-install-recommends jq
|
||
|
|
||
|
# [Optional] Uncomment if you want to install an additional version of node using nvm
|
||
|
# ARG EXTRA_NODE_VERSION=10
|
||
|
# RUN su node -c "source /usr/local/share/nvm/nvm.sh && nvm install ${EXTRA_NODE_VERSION}"
|
||
|
|
||
|
# [Optional] Uncomment if you want to install more global node modules
|
||
|
# RUN su node -c "npm install -g <your-package-list-here>"
|
||
|
|
||
|
RUN mkdir /scripts
|
||
|
COPY build-npm-package.sh /scripts
|
||
|
COPY yarn-local-registry-fixup.sh /scripts
|
||
|
COPY build-npm-package-local-dependencies.sh /scripts
|
||
|
COPY check-uid.sh /scripts
|
||
|
ENV PATH="${PATH}:/scripts"
|
||
|
|
||
|
COPY entrypoint.sh .
|
||
|
ENTRYPOINT ["./entrypoint.sh"]
|
||
|
# Placeholder CMD : generally this will be overridden at run time like :
|
||
|
# docker run -it -v /home/builder/cerc/laconic-sdk:/workspace cerc/builder-js sh -c 'cd /workspace && yarn && yarn build'
|
||
|
CMD node --version
|