├── .gitignore ├── README.md ├── alpine.docker ├── bin ├── lib │ └── tty.sh ├── node ├── npm └── yarn ├── cypress-slim.docker ├── dev-alpine.docker ├── dev-slim.docker ├── entrypoint.sh └── slim.docker /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | A [Docker](https://www.docker.com) image for [Node](https://nodejs.org). 2 | 3 | To use the container with a project, do the following: 4 | 5 | * Copy the bin directory into your project. 6 | 7 | * Ensure that your profile PATH includes `./bin` and that it takes priority over 8 | any other directory that may include a composer executable: 9 | 10 | `PATH=./bin:$PATH` 11 | 12 | Now whenever you are in your project's directory, you can simply execute 13 | `node` as you would with a typical composer installation, and the command 14 | will execute in the container instead: 15 | 16 | `node --help` 17 | 18 | Docker Hub : https://hub.docker.com/r/chekote/node/ 19 | -------------------------------------------------------------------------------- /alpine.docker: -------------------------------------------------------------------------------- 1 | # chekote/node:latest-alpine 2 | # chekote/node:{node version}-alpine 3 | ARG YARN_VERSION=stable 4 | ARG NODE_VERSION=lts 5 | 6 | FROM node:${NODE_VERSION}-alpine 7 | 8 | # install su-exec 9 | RUN set -euxo pipefail; \ 10 | # 11 | # Upgrade all packages \ 12 | apk update; \ 13 | apk upgrade; \ 14 | # 15 | apk add --no-cache shadow su-exec; \ 16 | # 17 | # verify that the binary works 18 | su-exec; \ 19 | su-exec nobody true; \ 20 | # 21 | # Switch to latest stable yarn 22 | yarn set version $YARN_VERSION; \ 23 | # 24 | # Ensure workdir exists 25 | mkdir /workdir; \ 26 | # 27 | # Make sure it all works 28 | node --version; \ 29 | npm --version; \ 30 | yarn --version; 31 | 32 | WORKDIR /workdir 33 | 34 | COPY entrypoint.sh /usr/local/bin/entrypoint.sh 35 | 36 | ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] 37 | -------------------------------------------------------------------------------- /bin/lib/tty.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | TTY=''; 4 | if [ -t 0 ] ; then 5 | TTY=-t; 6 | fi 7 | 8 | -------------------------------------------------------------------------------- /bin/node: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 4 | 5 | . "${DIR}"/lib/tty.sh 6 | 7 | docker run -i $TTY -v "$(pwd):/workdir" --rm chekote/node node "$@" 8 | -------------------------------------------------------------------------------- /bin/npm: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 4 | 5 | . "${DIR}"/lib/tty.sh 6 | 7 | docker run -i $TTY -v "$(pwd):/workdir" --rm chekote/node npm "$@" 8 | -------------------------------------------------------------------------------- /bin/yarn: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 4 | 5 | . "${DIR}"/lib/tty.sh 6 | 7 | docker run -i $TTY -v "$(pwd):/workdir" --rm chekote/node yarn "$@" 8 | -------------------------------------------------------------------------------- /cypress-slim.docker: -------------------------------------------------------------------------------- 1 | # chekote/node:latest-cypress-slim 2 | # chekote/node:{node version}-cypress-slim 3 | # chekote/node:{node version}-yarn{yarn version}-cypress-slim 4 | FROM chekote/node:latest-dev-slim 5 | 6 | RUN set -eux; \ 7 | # 8 | # Upgrade all packages 9 | apt-get update; \ 10 | apt-get upgrade -y; \ 11 | # 12 | # Cypress Dependencies 13 | apt-get install -y --no-install-recommends --no-install-suggests \ 14 | libgtk2.0-0 \ 15 | libgtk-3-0 \ 16 | libgbm-dev \ 17 | libnotify-dev \ 18 | libgconf-2-4 \ 19 | libnss3 \ 20 | libxss1 \ 21 | libasound2 \ 22 | libxtst6 \ 23 | xauth \ 24 | xvfb; \ 25 | # 26 | # Cleanup 27 | apt-get remove -y; \ 28 | apt-get autoremove -y; \ 29 | apt-get clean; \ 30 | rm -rf /var/lib/apt/lists/*; \ 31 | -------------------------------------------------------------------------------- /dev-alpine.docker: -------------------------------------------------------------------------------- 1 | # chekote/node:latest-dev-alpine 2 | # chekote/node:{node version}-dev-alpine 3 | FROM chekote/node:latest-alpine 4 | 5 | RUN set -euxo pipefail; \ 6 | # 7 | # Upgrade all packages 8 | apk update; \ 9 | apk upgrade; \ 10 | # 11 | # Node Dependencies 12 | apk add --no-cache g++ git make openssh python3; \ 13 | # 14 | # Add github.com to known hosts 15 | mkdir /home/node/.ssh; \ 16 | ssh-keyscan -t rsa github.com >> /home/node/.ssh/known_hosts; \ 17 | chown -R node:node /home/node/.ssh; \ 18 | # 19 | # Make sure the rest works 20 | g++ --version; \ 21 | git --version; \ 22 | make --version; \ 23 | python3 --version; 24 | -------------------------------------------------------------------------------- /dev-slim.docker: -------------------------------------------------------------------------------- 1 | # chekote/node:latest-dev-slim 2 | # chekote/node:{node version}-dev-slim 3 | # chekote/node:{node version}-yarn{yarn-version}-dev-slim 4 | FROM chekote/node:latest-slim 5 | 6 | RUN set -eux; \ 7 | # 8 | # Upgrade all packages 9 | apt-get update; \ 10 | apt-get upgrade -y; \ 11 | # 12 | # Node Dev Dependencies 13 | apt-get install -y --no-install-recommends --no-install-suggests \ 14 | g++ \ 15 | git \ 16 | ssh \ 17 | make \ 18 | python3; \ 19 | # 20 | # Cleanup 21 | apt-get remove -y; \ 22 | apt-get autoremove -y; \ 23 | apt-get clean; \ 24 | rm -rf /var/lib/apt/lists/*; \ 25 | # 26 | # Add github.com to known hosts 27 | mkdir /home/node/.ssh; \ 28 | ssh-keyscan -t rsa github.com >> /home/node/.ssh/known_hosts; \ 29 | chown -R node:node /home/node/.ssh; \ 30 | # 31 | # Make sure the rest works 32 | g++ --version; \ 33 | git --version; \ 34 | make --version; \ 35 | python3 --version; 36 | -------------------------------------------------------------------------------- /entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Based on: Deni Bertović https://denibertovic.com/posts/handling-permissions-with-docker-volumes/ 4 | 5 | # Use the LOCAL_USER_ID that was passed in, or fallback to 9001 6 | USER_ID="${LOCAL_USER_ID:-9001}" 7 | 8 | # Get the username that is associated with the user id (if any) 9 | USER_NAME=$(getent passwd | awk -F: '$3 == '$USER_ID' { print $1 }') 10 | 11 | # Does the user already exist? 12 | if [ "$USER_NAME" = "" ]; then 13 | # No, Set the id of node 14 | USER_NAME=node 15 | usermod -u "$USER_ID" "$USER_NAME" 16 | fi 17 | 18 | # Make sure node modules is part of the path. 19 | export PATH="$PATH:./node_modules/.bin" 20 | 21 | # Execute the command 22 | su-exec "$USER_NAME" "$@" 23 | -------------------------------------------------------------------------------- /slim.docker: -------------------------------------------------------------------------------- 1 | FROM debian:stable-slim AS su-exec-builder 2 | 3 | RUN set -eux; \ 4 | # 5 | apt-get update; \ 6 | apt-get install -y --no-install-recommends ca-certificates curl; \ 7 | # 8 | curl -o /usr/local/bin/su-exec.c https://raw.githubusercontent.com/ncopa/su-exec/master/su-exec.c; \ 9 | # 10 | apt-get update; \ 11 | apt-get install -y --no-install-recommends gcc libc-dev; \ 12 | gcc -Wall /usr/local/bin/su-exec.c -o/usr/local/bin/su-exec; \ 13 | chown root:root /usr/local/bin/su-exec; \ 14 | chmod 0755 /usr/local/bin/su-exec; 15 | 16 | # chekote/node:latest-slim 17 | # chekote/node:{node version}-slim 18 | # chekote/node:{node version}-yarn{yarn-version}-slim 19 | FROM node:lts-slim 20 | 21 | ENV DEBIAN_FRONTEND=noninteractive 22 | 23 | COPY --from=su-exec-builder /usr/local/bin/su-exec /usr/local/bin/su-exec 24 | 25 | RUN set -eux; \ 26 | # 27 | # Upgrade all packages 28 | apt-get update; \ 29 | apt-get upgrade -y; \ 30 | # 31 | apt-get install -y --no-install-recommends \ 32 | # 33 | # CA Certificates 34 | ca-certificates; \ 35 | # 36 | # Cleanup 37 | apt-get autoremove -y; \ 38 | apt-get clean; \ 39 | rm -rf /var/lib/apt/lists/*; \ 40 | rm -rf /var/cache/apt/*; \ 41 | # 42 | # Switch to latest stable yarn 43 | yarn set version stable; \ 44 | # 45 | # Ensure workdir exists 46 | mkdir /workdir; \ 47 | # 48 | # Make sure it all works 49 | node --version; \ 50 | npm --version; \ 51 | yarn --version; 52 | 53 | WORKDIR /workdir 54 | 55 | COPY entrypoint.sh /usr/local/bin/entrypoint.sh 56 | 57 | ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] 58 | --------------------------------------------------------------------------------