メインコンテンツまでスキップ

Distroless イメージ

Takumi Images の本番イメージには、動かすプログラムと、その実行に必要なランタイム依存だけが含まれます。 シェルもパッケージマネージャもなく、ファイル操作や通信のための汎用コマンド群も持ちません。 このように、ディストリビューション由来の汎用ツールを持たないイメージを distroless と呼びます。 各イメージは Nix でビルドしており、含まれるのは CA 証明書やタイムゾーンデータなど、プログラムの実行に必要なものだけです。

メリット

distroless にする一番の効果は、脆弱性を含みうるコンポーネントの母数そのものが小さくなることです。 どれだけ小さいかは、実際に中身を数えると分かります。 たとえば busybox イメージを展開して、含まれる Nix のストアパスを列挙すると、次の 10 個がすべてです。

$ crane export --platform linux/amd64 images.flatt.tech/takumi/busybox:latest - \
| tar -t | grep -oE 'nix/store/[^/]+' | sort -u
nix/store/58pi7dmvz599jk7dypk2hw4mzvfjlvq3-group
nix/store/68q98vvgh88dxan3pglapfwzakz4r99j-nss-cacert-3.123
nix/store/8kvxvr3pmsypxiypq4g8zy13glnfr7nx-glibc-2.42-67
nix/store/aasbksznz37vw5pb26wq86209q5cmza8-xgcc-15.2.0-libgcc
nix/store/cdww1f1p7r6xqwfsxr74dh5a6213c3xb-passwd
nix/store/ipz4lbivx3q7gr79130d6g5ix35vibnw-libunistring-1.4.2
nix/store/n7vzh8day7g32l5j9pfn1yckw4p24qks-nsswitch.conf
nix/store/nw13piwy5s713rg78h0js432rwz4d247-takumi-busybox-path
nix/store/xpp0j7j90g2nbr382bi2ym0ln9ykli6l-busybox-1.37.0
nix/store/zlvydh6q1rv1jza79b21yhi07ic0dkkg-libidn2-2.3.8

ソフトウェアと呼べるのは busybox 本体、glibc とその GCC ランタイム(xgcc-libgcc)、libidn2、libunistring、CA 証明書(nss-cacert)の 6 つで、残りは passwd などの設定ファイルです。 この一覧は、イメージに付属する SBOM でも確認できます。 比較のために、汎用のベースイメージである debian:stable に入っているパッケージを数えると 78 個あります(2026 年 7 月時点)。

$ docker run --rm debian:stable sh -c "dpkg -l | grep -c '^ii'"
78

この 78 個には、シェル、パッケージマネージャ(apt)、Perl など、多くのワークロードが実行時には使わないものが含まれます。 脆弱性スキャナが列挙する対象がそのぶん増え、どれが利用者のワークロードに関係するのかというトリアージも利用者側の作業になります。 Takumi Images の本番イメージは、動かすプログラムに必要なものしか積まないため、スキャナが報告する項目のうち、実際に対応が必要なものの比率が高くなります。

攻撃対象領域(attack surface)が狭くなることも、本番運用に向く理由のひとつです。 コンテナ内でコードを実行できる攻撃者がいたとしても、次の足がかりに使う shcurl のようなシェル、汎用コマンド群がそもそも存在しません。 これは侵害そのものを防ぐものではありませんが、侵害後に攻撃者ができることを狭める効果は見込めるため、本番のベースとして選びやすい構成です。