【ディストロレス】

Distroless とは?

最終更新:
💡 実行に必要なものを残し、コンテナ内の道具を減らす

GoogleContainerToolsが公開する、アプリケーションの実行に必要なものへ絞ったコンテナベースイメージ群。通常のイメージはシェルやパッケージマネージャーを含まず、利用者がアプリを追加して使う。

📌 このページのポイント
実行に必要なものへ絞る ツール付きの例 通常のDistroless 追加したアプリ 必要なランタイム やライブラリ 追加したアプリ 必要なランタイム やライブラリ シェル・ツール パッケージ管理 シェル・ パッケージ管理なし debug版にはシェルがある 道具を減らしても、更新や脆弱性対策は必要
ベースイメージにアプリを追加した実行イメージの比較例です。通常のDistrolessはシェルなどを省きますが、侵入や脆弱性がなくなる保証ではありません。
ひよこ ひよこ
普通のコンテナと何が違うの?
ペンギン先生 ペンギン先生
通常のLinux系イメージも、ディストリビューション全体を丸ごと含むわけではないよ。Distrolessはさらに実行に必要なものへ絞り、通常版にはシェルやパッケージマネージャーを入れない。アプリ自体は利用者が追加するんだ。
ひよこ ひよこ
シェルがないと侵入されないの?
ペンギン先生 ペンギン先生
使える道具や余分なソフトウェアを減らす効果はあるけれど、侵入を防ぐ保証ではないよ。アプリや残っているライブラリの脆弱性、設定の問題は別に対処する必要がある。更新や脆弱性の確認も続けよう。
ひよこ ひよこ
中に入って調べたいときは?
ペンギン先生 ペンギン先生
通常版ではシェルを起動して調べる方法が使えないね。ログなどを活用するほか、DistrolessにはBusyBoxのシェルを含むdebug版もあるよ。調査に使うイメージと本番で使うイメージの違いを理解し、実行環境での動作も確認するんだ。
ひよこ ひよこ
どうやってアプリを入れるの?
ペンギン先生 ペンギン先生
たとえばマルチステージビルドで、ビルド用のステージから実行用のDistrolessへ成果物をコピーする。コンパイラーなどを最終イメージに残さずに済むよ。シェルがない通常版では、起動命令もシェルに頼らない実行形式にする必要があるね。
ひよこ ひよこ
どの種類を選べばいい?
ペンギン先生 ペンギン先生
Java・Python・Node.js向けなどがあるので、必要なランタイムと対応する版を公式一覧で確認しよう。静的リンクされた実行ファイルにはstatic系が候補になるけれど、Go製でも外部ライブラリが必要な場合はある。サイズや起動速度も、実際のアプリで確かめるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Distroless」って出てきたら「アプリの実行に必要なものへ絞ったコンテナベースイメージ」と思えればだいたいOK!
📖 おまけ:英語の意味
「Distroless」 = ディストリビューションを省いた、という名前
💬 distroはLinuxディストリビューションの略、lessは「なし」。ただしDebian由来のファイルなどを使っており、OS由来の要素が全くないという意味ではないよ

参考資料

← 用語集にもどる