# Distroless イメージ {#distroless}

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

## メリット {#benefits}

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

```bash
$ 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](/docs/ja/t/images/features/attestations/sbom) でも確認できます。
比較のために、汎用のベースイメージである `debian:stable` に入っているパッケージを数えると 78 個あります（2026 年 7 月時点）。

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

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

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