distrolessというDockerイメージでデプロイする

distrolessとは?

最近、distrolessというDockerイメージを知りました。

nodepythonなどのアプリケーションを実行するため以外のものを削ぎ落としたイメージです。なので例えば、シェルなどが使えません。

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" ]

本当は軽量化によるコンテナの起動時間の短縮を狙っていたのですが、そこはあまり変わらないようです。でもセキュリティが向上したのでよしとします。

GitHub - GoogleContainerTools/distroless: 🥑 Language focused docker images, minus the operating system.