Distroless イメージ
Takumi Images は各イメージを Nix でビルドし、動かすプログラムと、その実行や互換性維持に必要なランタイム依存だけを収録します。
一律の OS ユーザーランドやパッケージ DB は 追加しません。
curl や nginx などは /bin/sh もパッケージマネージャも持たない distroless 構成です。
一方、busybox や bash はシェル・コマンド群そのものを提供するイメージで、node や postgres なども互換性のためにシェルやツールを含みます。
したがって、カタログ全体が一律にシェルを持たないのではなく、各イメージの用途に必要な範囲まで小さくする設計です。実際の収録物は、イメージ設定と SBOM で確認できます。
メリット
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/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 でも確認できます。
比較のために、汎用のベースイメージである debian:stable に入っているパッケージを数えると 78 個あります(2026 年 7 月時点)。
$ 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 コンポーネントを持ち込まないことで攻撃対象を絞っています。
これは侵害そのものを防ぐものではありませんが、侵害後に利用できる部品を減らす効果が見込めます。