Smaller Base Image
Use the alpine variant of the official Node.js Docker image for building the image and serving the example REST API.
|
Other options for a smaller base image:
|
Result
| Image (MB) | Layer Count | node Binary (MB) | node_modules (MB) | Server (B) | |
|---|---|---|---|---|---|
Baseline |
|
|
|
|
|
Previous |
|
|
|
|
|
Result |
|
|
|
|
|
$ SOURCE_DATE_EPOCH=1 GITHUB_SHA="N/A" scripts/docker_build.sh -p linux/amd64 -t 004-alpine -n
...
$ docker images de.sdavids/sdavids-node-docker-image-slimming:004-alpine --format "{{.Repository}}\t{{.Tag}}\t{{.Size}}"
de.sdavids/sdavids-node-docker-image-slimming 004-alpine 239MB
$ docker run --rm de.sdavids/sdavids-node-docker-image-slimming:004-alpine du -hs /usr/local/bin/node
118.0M /usr/local/bin/node
$ docker run --rm de.sdavids/sdavids-node-docker-image-slimming:004-alpine du -hs /node
6.3M /node
$ docker run --rm de.sdavids/sdavids-node-docker-image-slimming:004-alpine du -hs /node/node_modules
6.2M /node/node_modules
$ docker run --rm de.sdavids/sdavids-node-docker-image-slimming:004-alpine stat -c "%s" /node/server.mjs
2515
$ docker run --rm de.sdavids/sdavids-node-docker-image-slimming:004-alpine ls -A /node
healthcheck.mjs
node_modules
package-lock.json
package.json
server.mjs
$ docker image history --format "table {{.Size}}\t{{.CreatedBy}}" de.sdavids/sdavids-node-docker-image-slimming:004-alpine
SIZE CREATED BY
0B LABEL org.opencontainers.image.licenses=Apac…
0B HEALTHCHECK &{["CMD-SHELL" "node /node/healt…
0B CMD ["node" "server.mjs"]
0B EXPOSE [3000/tcp]
0B USER node:node
0B ENV PORT=3000
0B ENV NODE_ENV=production
16.4kB COPY --chown=node:node src/js ./ # buildkit
10.5MB RUN /bin/sh -c npm ci --omit=dev --omit=opti…
57.3kB COPY --chown=node:node package.json package-…
8.19kB WORKDIR /node
0B CMD ["node"]
0B ENTRYPOINT ["docker-entrypoint.sh"]
20.5kB COPY docker-entrypoint.sh /usr/local/bin/ # …
5.48MB RUN /bin/sh -c apk add --no-cache --virtual …
0B ENV YARN_VERSION=1.22.22
155MB RUN /bin/sh -c addgroup -g 1000 node && …
0B ENV NODE_VERSION=24.12.0
0B CMD ["/bin/sh"]
9.11MB ADD alpine-minirootfs-3.23.2-x86_64.tar.gz /…
$ printf 'Layer Count: %s\n' "$(docker history de.sdavids/sdavids-node-docker-image-slimming:004-alpine | tail -n +2 | wc -l | tr -d ' ')"
Layer Count: 20