Skip to content

Commit 64fa3c9

Browse files
chorrellChristopher Horrell
authored and
Christopher Horrell
committed
Add Node.js "core" image
This is an image without npm or yarn installed, suitable for multi-stage builds. Also: - Skip setting yarn version in core variant - Skip npm and yarn tests for "core" variant Closes #404
1 parent 815f6cf commit 64fa3c9

File tree

8 files changed

+265
-4
lines changed

8 files changed

+265
-4
lines changed

10/core/Dockerfile

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
FROM debian:jessie-slim
2+
3+
RUN groupadd --gid 1000 node \
4+
&& useradd --uid 1000 --gid node --shell /bin/bash --create-home node
5+
6+
# gpg keys listed at https://github.com/nodejs/node#release-team
7+
RUN set -ex \
8+
&& for key in \
9+
94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
10+
FD3A5288F042B6850C66B31F09FE44734EB7990E \
11+
71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
12+
DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
13+
C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
14+
B9AE9905FFD7803F25714661B63B535A4C206CA9 \
15+
56730D5401028683275BD23C23EFEFE93C4CFFFE \
16+
77984A986EBC2AA786BC0F66B01FBB92821C587A \
17+
8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \
18+
; do \
19+
gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \
20+
gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
21+
gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \
22+
done
23+
24+
ENV NODE_VERSION 10.6.0
25+
26+
RUN buildDeps='ca-certificates curl xz-utils' \
27+
ARCH= && dpkgArch="$(dpkg --print-architecture)" \
28+
&& case "${dpkgArch##*-}" in \
29+
amd64) ARCH='x64';; \
30+
ppc64el) ARCH='ppc64le';; \
31+
s390x) ARCH='s390x';; \
32+
arm64) ARCH='arm64';; \
33+
armhf) ARCH='armv7l';; \
34+
i386) ARCH='x86';; \
35+
*) echo "unsupported architecture"; exit 1 ;; \
36+
esac \
37+
&& set -ex \
38+
&& apt-get update && apt-get install -y $buildDeps --no-install-recommends \
39+
&& rm -rf /var/lib/apt/lists/* \
40+
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \
41+
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
42+
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
43+
&& grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
44+
&& tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
45+
&& rm -rf /usr/local/lib/node_modules/ \
46+
&& rm -rf /usr/local/bin/npm \
47+
&& rm -rf /usr/local/bin/npx \
48+
&& rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
49+
&& apt-get purge -y --auto-remove $buildDeps \
50+
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs
51+
52+
CMD [ "node" ]

11/core/Dockerfile

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
FROM debian:jessie-slim
2+
3+
RUN groupadd --gid 1000 node \
4+
&& useradd --uid 1000 --gid node --shell /bin/bash --create-home node
5+
6+
# gpg keys listed at https://github.com/nodejs/node#release-team
7+
RUN set -ex \
8+
&& for key in \
9+
94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
10+
FD3A5288F042B6850C66B31F09FE44734EB7990E \
11+
71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
12+
DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
13+
C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
14+
B9AE9905FFD7803F25714661B63B535A4C206CA9 \
15+
56730D5401028683275BD23C23EFEFE93C4CFFFE \
16+
77984A986EBC2AA786BC0F66B01FBB92821C587A \
17+
8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \
18+
; do \
19+
gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \
20+
gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
21+
gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \
22+
done
23+
24+
ENV NODE_VERSION 11.3.0
25+
26+
RUN buildDeps='ca-certificates curl xz-utils' \
27+
ARCH= && dpkgArch="$(dpkg --print-architecture)" \
28+
&& case "${dpkgArch##*-}" in \
29+
amd64) ARCH='x64';; \
30+
ppc64el) ARCH='ppc64le';; \
31+
s390x) ARCH='s390x';; \
32+
arm64) ARCH='arm64';; \
33+
armhf) ARCH='armv7l';; \
34+
i386) ARCH='x86';; \
35+
*) echo "unsupported architecture"; exit 1 ;; \
36+
esac \
37+
&& set -ex \
38+
&& apt-get update && apt-get install -y $buildDeps --no-install-recommends \
39+
&& rm -rf /var/lib/apt/lists/* \
40+
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \
41+
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
42+
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
43+
&& grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
44+
&& tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
45+
&& rm -rf /usr/local/lib/node_modules/ \
46+
&& rm -rf /usr/local/bin/npm \
47+
&& rm -rf /usr/local/bin/npx \
48+
&& rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
49+
&& apt-get purge -y --auto-remove $buildDeps \
50+
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs
51+
52+
CMD [ "node" ]

6/core/Dockerfile

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
FROM debian:jessie-slim
2+
3+
RUN groupadd --gid 1000 node \
4+
&& useradd --uid 1000 --gid node --shell /bin/bash --create-home node
5+
6+
# gpg keys listed at https://github.com/nodejs/node#release-team
7+
RUN set -ex \
8+
&& for key in \
9+
94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
10+
FD3A5288F042B6850C66B31F09FE44734EB7990E \
11+
71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
12+
DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
13+
C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
14+
B9AE9905FFD7803F25714661B63B535A4C206CA9 \
15+
56730D5401028683275BD23C23EFEFE93C4CFFFE \
16+
77984A986EBC2AA786BC0F66B01FBB92821C587A \
17+
8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \
18+
; do \
19+
gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \
20+
gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
21+
gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \
22+
done
23+
24+
ENV NODE_VERSION 6.14.3
25+
26+
RUN buildDeps='ca-certificates curl xz-utils' \
27+
ARCH= && dpkgArch="$(dpkg --print-architecture)" \
28+
&& case "${dpkgArch##*-}" in \
29+
amd64) ARCH='x64';; \
30+
ppc64el) ARCH='ppc64le';; \
31+
s390x) ARCH='s390x';; \
32+
arm64) ARCH='arm64';; \
33+
armhf) ARCH='armv7l';; \
34+
i386) ARCH='x86';; \
35+
*) echo "unsupported architecture"; exit 1 ;; \
36+
esac \
37+
&& set -ex \
38+
&& apt-get update && apt-get install -y $buildDeps --no-install-recommends \
39+
&& rm -rf /var/lib/apt/lists/* \
40+
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \
41+
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
42+
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
43+
&& grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
44+
&& tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
45+
&& rm -rf /usr/local/lib/node_modules/ \
46+
&& rm -rf /usr/local/bin/npm \
47+
&& rm -rf /usr/local/bin/npx \
48+
&& rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
49+
&& apt-get purge -y --auto-remove $buildDeps \
50+
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs
51+
52+
CMD [ "node" ]

8/core/Dockerfile

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
FROM debian:jessie-slim
2+
3+
RUN groupadd --gid 1000 node \
4+
&& useradd --uid 1000 --gid node --shell /bin/bash --create-home node
5+
6+
# gpg keys listed at https://github.com/nodejs/node#release-team
7+
RUN set -ex \
8+
&& for key in \
9+
94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
10+
FD3A5288F042B6850C66B31F09FE44734EB7990E \
11+
71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
12+
DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
13+
C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
14+
B9AE9905FFD7803F25714661B63B535A4C206CA9 \
15+
56730D5401028683275BD23C23EFEFE93C4CFFFE \
16+
77984A986EBC2AA786BC0F66B01FBB92821C587A \
17+
8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \
18+
; do \
19+
gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \
20+
gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
21+
gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \
22+
done
23+
24+
ENV NODE_VERSION 8.11.3
25+
26+
RUN buildDeps='ca-certificates curl xz-utils' \
27+
ARCH= && dpkgArch="$(dpkg --print-architecture)" \
28+
&& case "${dpkgArch##*-}" in \
29+
amd64) ARCH='x64';; \
30+
ppc64el) ARCH='ppc64le';; \
31+
s390x) ARCH='s390x';; \
32+
arm64) ARCH='arm64';; \
33+
armhf) ARCH='armv7l';; \
34+
i386) ARCH='x86';; \
35+
*) echo "unsupported architecture"; exit 1 ;; \
36+
esac \
37+
&& set -ex \
38+
&& apt-get update && apt-get install -y $buildDeps --no-install-recommends \
39+
&& rm -rf /var/lib/apt/lists/* \
40+
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \
41+
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
42+
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
43+
&& grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
44+
&& tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
45+
&& rm -rf /usr/local/lib/node_modules/ \
46+
&& rm -rf /usr/local/bin/npm \
47+
&& rm -rf /usr/local/bin/npx \
48+
&& rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
49+
&& apt-get purge -y --auto-remove $buildDeps \
50+
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs
51+
52+
CMD [ "node" ]

Dockerfile-core.template

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
FROM debian:stretch-slim
2+
3+
RUN groupadd --gid 1000 node \
4+
&& useradd --uid 1000 --gid node --shell /bin/bash --create-home node
5+
6+
# gpg keys listed at https://github.com/nodejs/node#release-team
7+
RUN set -ex \
8+
&& for key in \
9+
"${NODE_KEYS[@]}"
10+
; do \
11+
gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \
12+
gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
13+
gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \
14+
done
15+
16+
ENV NODE_VERSION 0.0.0
17+
18+
RUN buildDeps='ca-certificates curl xz-utils' \
19+
ARCH= && dpkgArch="$(dpkg --print-architecture)" \
20+
&& case "${dpkgArch##*-}" in \
21+
amd64) ARCH='x64';; \
22+
ppc64el) ARCH='ppc64le';; \
23+
s390x) ARCH='s390x';; \
24+
arm64) ARCH='arm64';; \
25+
armhf) ARCH='armv7l';; \
26+
i386) ARCH='x86';; \
27+
*) echo "unsupported architecture"; exit 1 ;; \
28+
esac \
29+
&& set -ex \
30+
&& apt-get update && apt-get install -y $buildDeps --no-install-recommends \
31+
&& rm -rf /var/lib/apt/lists/* \
32+
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \
33+
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
34+
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
35+
&& grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
36+
&& tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
37+
&& rm -rf /usr/local/lib/node_modules/ \
38+
&& rm -rf /usr/local/bin/npm \
39+
&& rm -rf /usr/local/bin/npx \
40+
&& rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
41+
&& apt-get purge -y --auto-remove $buildDeps \
42+
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs
43+
44+
CMD [ "node" ]

test-build.sh

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ function test_image() {
5555
info "Testing ${full_tag}"
5656
(
5757
export full_version=${full_version}
58+
export variant=${variant}
5859
export full_tag=${full_tag}
5960
bats test-image.bats
6061
)

test-image.bats

+6
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,17 @@
77
}
88

99
@test "Test for npm" {
10+
if [ ${variant} == "core" ]; then
11+
skip "Skip npm tests in core variant"
12+
fi
1013
run docker run --rm -it node:"$full_tag" npm --version
1114
[ "$status" -eq 0 ]
1215
}
1316

1417
@test "Test for yarn" {
18+
if [ ${variant} == "core" ]; then
19+
skip "Skip yarn tests in core variant"
20+
fi
1521
run docker run --rm -it node:"$full_tag" yarn --version
1622
[ "$status" -eq 0 ]
1723
}

update.sh

+6-4
Original file line numberDiff line numberDiff line change
@@ -140,11 +140,13 @@ function update_node_version() {
140140
sed -Ei -e 's/^FROM (.*)/FROM '"$fromprefix"'\1/' "${dockerfile}-tmp"
141141
sed -Ei -e 's/^(ENV NODE_VERSION ).*/\1'"${nodeVersion}"'/' "${dockerfile}-tmp"
142142

143-
if [ "${SKIP}" = true ]; then
144-
# Get the currently used Yarn version
145-
yarnVersion="$(grep "ENV YARN_VERSION" "${dockerfile}" | cut -d' ' -f3)"
143+
if [ "${variant}" != "core" ]; then
144+
if [ "${SKIP}" = true ]; then
145+
# Get the currently used Yarn version
146+
yarnVersion="$(grep "ENV YARN_VERSION" "${dockerfile}" | cut -d' ' -f3)"
147+
fi
148+
sed -Ei -e 's/^(ENV YARN_VERSION ).*/\1'"${yarnVersion}"'/' "${dockerfile}-tmp"
146149
fi
147-
sed -Ei -e 's/^(ENV YARN_VERSION ).*/\1'"${yarnVersion}"'/' "${dockerfile}-tmp"
148150

149151
# Only for onbuild variant
150152
sed -Ei -e 's/^(FROM .*node:)[^-]*(-.*)/\1'"${nodeVersion}"'\2/' "${dockerfile}-tmp"

0 commit comments

Comments
 (0)