FROM ruby:3.4.5-bullseye AS ruby FROM node:12.18.3-slim AS node FROM ruby AS build # Set all encoding to UTF-8 ENV RUBYOPT="-KU -E utf-8:utf-8" # Install additional dependencies not present in the base image RUN apt-get update && \ apt-get install -y bison \ build-essential \ libxslt-dev \ default-mysql-server # Add core code to container WORKDIR /code COPY . /code RUN gem install bundler:2.7.2 RUN bundle install # cherry pick only what we really need to run Node.js COPY --from=node /usr/local/bin/node /usr/local/bin COPY --from=node /usr/local/include/node /usr/local/include COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules COPY --from=node /usr/local/share/doc/node /usr/local/share/doc COPY --from=node /usr/local/share/man/man1/node.1 /usr/local/share/man/man1 COPY --from=node /usr/local/share/systemtap/tapset/node.stp /usr/local/share/systemtap/tapset COPY --from=node /opt/yarn-v1.22.4 /opt/yarn-v1.22.4 # create symlinks needed to run Node.js & NPM RUN ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm RUN ln -s /usr/local/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx RUN ln -s /opt/yarn-v1.22.4/bin/yarn /usr/local/bin/yarn RUN ln -s /opt/yarn-v1.22.4/bin/yarnpkg /usr/local/bin/yarnpkg RUN ln -s /usr/local/bin/node /usr/local/bin/nodejs FROM build # setup a dedicated user for Node.js RUN groupadd --gid 1000 node RUN useradd --uid 1000 \ --gid node \ --shell /bin/bash \ --create-home node # setup Node.js environment ENV NODEJS_HOME=/opt/node-v12.18.3-linux-x64/bin ENV PATH=$NODEJS_HOME:$PATH WORKDIR /code EXPOSE 80 443 3000 ENTRYPOINT ["/bin/bash"] CMD ["/code/docker/entrypoint.sh"]