Baseline
The baseline with a Dockerfile
similar to:
FROM node
COPY . ./
RUN npm i
CMD ["node", "src/js/server.mjs"]
It uses the default variant of the official Node.js Docker image for building the image and serving the example REST API with no optimizations.
Result
Image (MB) | Layer Count | node Binary (MB) | node_modules (MB) | Server (B) | |
---|---|---|---|---|---|
Baseline |
|
|
|
|
|
$ SOURCE_DATE_EPOCH=1 GITHUB_SHA="N/A" scripts/docker_build.sh -p linux/amd64 -t 000-baseline -n
...
$ docker images de.sdavids/sdavids-node-docker-image-slimming:000-baseline --format "{{.Repository}}\t{{.Tag}}\t{{.Size}}"
de.sdavids/sdavids-node-docker-image-slimming 000-baseline 1.74GB
$ docker run --rm de.sdavids/sdavids-node-docker-image-slimming:000-baseline du -hs /usr/local/bin/node
116M /usr/local/bin/node
$ docker run --rm de.sdavids/sdavids-node-docker-image-slimming:000-baseline du -hs /node
67M /node
$ docker run --rm de.sdavids/sdavids-node-docker-image-slimming:000-baseline du -hs /node/node_modules
51M /node/node_modules
$ docker run --rm de.sdavids/sdavids-node-docker-image-slimming:000-baseline stat -c "%s" /node/src/js/server.mjs
2515
$ docker run --rm de.sdavids/sdavids-node-docker-image-slimming:000-baseline ls -A /node
.devcontainer
.editorconfig
.git
.gitattributes
.github
.gitignore
.idea
.npmrc
.nvmrc
Dockerfile
LICENSES
README.adoc
REUSE.toml
docker
docs
node_modules
package-lock.json
package.json
scripts
src
$ docker image history --format "table {{.Size}}\t{{.CreatedBy}}" de.sdavids/sdavids-node-docker-image-slimming:000-baseline
SIZE CREATED BY
0B LABEL org.opencontainers.image.licenses=Apac…
0B HEALTHCHECK &{["CMD-SHELL" "node /node/src/j…
0B CMD ["node" "src/js/server.mjs"]
0B EXPOSE map[3000/tcp:{}]
0B USER node:node
0B ENV PORT=3000
0B ENV NODE_ENV=production
60.6MB RUN /bin/sh -c npm i && chown -R node:no…
32.5MB COPY . ./ # buildkit
8.19kB WORKDIR /node
0B CMD ["node"]
0B ENTRYPOINT ["docker-entrypoint.sh"]
20.5kB COPY docker-entrypoint.sh /usr/local/bin/ # …
5.41MB RUN /bin/sh -c set -ex && export GNUPGHOME…
0B ENV YARN_VERSION=1.22.22
202MB RUN /bin/sh -c ARCH= && dpkgArch="$(dpkg --p…
0B ENV NODE_VERSION=22.15.0
69.6kB RUN /bin/sh -c groupadd --gid 1000 node &&…
619MB RUN /bin/sh -c set -ex; apt-get update; ap…
194MB RUN /bin/sh -c set -eux; apt-get update; a…
52.2MB RUN /bin/sh -c set -eux; apt-get update; a…
133MB # debian.sh --arch 'amd64' out/ 'bookworm' '…
$ printf 'Layer Count: %s\n' "$(docker history de.sdavids/sdavids-node-docker-image-slimming:000-baseline | tail -n +2 | wc -l | tr -d ' ')"
Layer Count: 22