# Distroless イメージ {#distroless}

Takumi Images は各イメージを Nix でビルドし、動かすプログラムと、その実行や互換性維持に必要なランタイム依存だけを収録します。
一律の OS ユーザーランドやパッケージ DB は追加しません。
`curl` や `nginx` などは `/bin/sh` もパッケージマネージャも持たない **distroless** 構成です。
一方、`busybox` や `bash` はシェル・コマンド群そのものを提供するイメージで、`node` や `postgres` なども互換性のためにシェルやツールを含みます。
したがって、カタログ全体が一律にシェルを持たないのではなく、各イメージの用途に必要な範囲まで小さくする設計です。実際の収録物は、イメージ設定と [SBOM](/docs/ja/t/images/features/attestations/sbom) で確認できます。

## メリット {#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/05bhgqwdwy68k2flj55kcmp54hkbb3jq-nsswitch.conf
nix/store/72v59ca62vgj05ch6iylphh8n5xx3k45-passwd
nix/store/clqknm3pgln8pxb6n7iamffk313nr91r-libidn2-2.3.8
nix/store/czm0rdvgrdf1mf2q1w9pq1j4bc5n8hgk-group
nix/store/dxszpyw0pn7h1cxi1y6l33nmwk7f5knn-libunistring-1.4.2
nix/store/g9i6p3jr42s8bg8ywq4wq6dg4izw4ryn-takumi-busybox-path
nix/store/hps7pxvcgq32x46yx5a2nx53js5j41vb-xgcc-15.2.0-libgcc
nix/store/ias8xacs1h3jy7xgwi2awvim61k2ji6c-glibc-2.42-67
nix/store/kw8wnw8al89qjikhc1sxzdckgw1ms08x-nss-cacert-3.125
nix/store/zbi4rx3wwmgmhjml346hl2xzg8ax2ffq-busybox-1.37.0
```

ソフトウェアと呼べるのは 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 --pull=always --platform linux/amd64 debian:stable \
    dpkg-query -f '${binary:Package}\n' -W | wc -l
78
```

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

不要なコンポーネントを減らし、**攻撃対象領域**（attack surface）を狭くすることも、本番運用に向く理由のひとつです。
シェルを持たないイメージでは、コンテナ内でコードを実行できる攻撃者が次の足がかりに使う `sh` なども存在しません。
シェルやツールを用途上含むイメージはこの利点を持ちませんが、いずれも無関係な OS コンポーネントを持ち込まないことで攻撃対象を絞っています。
これは侵害そのものを防ぐものではありませんが、侵害後に利用できる部品を減らす効果が見込めます。
