軽量なコンテナを作るにはdistrolessのイメージをベースにするのがよいらしい。 distrolessは、Googleが管理しているイメージで、Google Container Registryで管理されているっぽい。
当たり前だけどdockerhubで検索してもでてこない。
とりあえず、nextのコンテナで試してみた。
FROM node:14-bullseye AS build-env ADD . /app WORKDIR /app RUN npm install RUN npm run build FROM gcr.io/distroless/nodejs:14 WORKDIR /app COPY --from=build-env /app /app EXPOSE 3000 CMD ["node_modules/.bin/next", "start"]
ちょっとめんどくさいけどできた。
どのくらい軽いか比較してみた。
- node:14-bullseye: 1.24GB
- node:14-bullseye-slim: 411MB
- gcr.io/distroless/nodejs:14 : 340MB
bullseye-slimと比較すると71MB削減、この差分に価値を見出すかどうかかなぁ。