distrolessとは?
最近、distrolessというDockerイメージを知りました。
nodeやpythonなどのアプリケーションを実行するため以外のものを削ぎ落としたイメージです。なので例えば、シェルなどが使えません。
GitHubのリポジトリには以下のように書いてます。
Language focused docker images, minus the operating system.
そうすることでセキュリティを向上させることができます。シェルがなければ、悪意のあるコードも実行しづらいですよね。イメージの容量も軽量化されます。
使ってみる
CloudRunをデプロイしているDockerfileで使ってみました。
FROM gcr.io/distroless/nodejs20-debian12
WORKDIR /usr/src/app
# ビルド処理等々。。。
EXPOSE 8080
ENV HOST=0.0.0.0
ENV PORT=8080
CMD [ ".output/server/index.mjs" ]
本当は軽量化によるコンテナの起動時間の短縮を狙っていたのですが、そこはあまり変わらないようです。でもセキュリティが向上したのでよしとします。