【ディストロレス】
Distroless とは?
💡 シェルもパッケージマネージャも捨てた、攻撃者が入れないコンテナ
📌 このページのポイント
- シェル・パッケージマネージャ・ユーティリティを一切含まないため攻撃面が極小
- イメージサイズが小幅になりデプロイが速くなる
- マルチステージビルドと組み合わせて本番コンテナをDistrolessにするのが定番
Distrolessって何がDistroless(ディストリビューションなし)なの?
通常のコンテナイメージはUbuntuやDebianなどのLinuxディストリビューションを丸ごと含んでいるよね。Distrolessはそのディストリビューション部分——シェル、パッケージマネージャ(apt/yumなど)、各種ユーティリティ——を全部除いたイメージなんだよ。
シェルがないと何かいいことがあるの?
でもデバッグするときに困りそうじゃない?
どうやって本番だけDistrolessにするの?
マルチステージビルドを使うんだよ。最初のステージ(builderステージ)で通常イメージを使ってコンパイルやビルドをして、最後のステージで `FROM gcr.io/distroless/java` などに切り替えてビルド成果物だけコピーするんだ。イメージサイズも劇的に小さくなるよ。
どんな言語に対応しているの?
まとめ:ざっくりこれだけ覚えればOK!
「Distroless」って出てきたら「シェルなし・ツールなしの超ミニマルな本番用コンテナベースイメージ」と思えればだいたいOK!
📖 おまけ:英語の意味
「Distroless」 = ディストリビューションなし
💬 distribution(Linuxディストリビューション)+ less(なし)を合わせた造語だよ。GoogleがOSSとして公開しており、gcr.io/distroless 配下で提供されているよ。