distrolessというDocker imageは一体何なのか? なぜdistrolessを使うべきなのか?
については、distrolessのREADMEに記載がありますのでそちらを参照してください。

https://github.com/GoogleContainerTools/distroless

"Distroless" images contain only your application and its runtime dependencies.
They do not contain package managers,
shells or any other programs you would expect to find in a standard Linux distribution.

Why should I use distroless images?
Restricting what's in your runtime container to precisely what's necessary for your app is
a best practice employed by Google and other tech giants that have used containers in production for many years.
It improves the signal to noise of scanners (e.g. CVE) and reduces the burden of establishing provenance to just what you need.

distrolessには、shellが含まれているdistroless debugというイメージもあります。

distroless debugについてもREADMEに記載があります。

Distroless images are minimal and lack shell access. The :debug image set for each language provides a busybox shell to enter.

shellはbusyboxのようですね。

busyboxが含まれる以外に差があるのか気になったので調べてみました。



Bazelビルドファイル内のbusyboxビルド設定はこの辺です。 https://github.com/GoogleContainerTools/distroless/blob/3fa91ba3a9f59cab0ca95e7abef7cf94e8b2c449/base/base.bzl#L63

Bazel使った事なくてBazelビルドファイルの読み方がわからないので、docker imageに含まれているファイルを比較してみます。

なお、僕は今はNode.js使ってるので、比較対象は以下の2つにします。

$ docker pull gcr.io/distroless/nodejs:14
$ docker pull gcr.io/distroless/nodejs:14-debug

それぞれのimageのサイズはこのくらい。差は1MBです。

$ docker images | egrep '^REPOSITORY|gcr.io/distroless/nodejs'
REPOSITORY                 TAG        IMAGE ID       CREATED        SIZE
gcr.io/distroless/nodejs   14         46f9a9a2a874   51 years ago   121MB
gcr.io/distroless/nodejs   14-debug   08e3f40e66c9   51 years ago   122MB

では次に中身の差を見てみます。

docker imageの中身を見るのはdlayerが便利です。
https://github.com/orisano/dlayer

go installでインストールしましょう。

$ go install github.com/orisano/dlayer@v0.3.1

以下のような感じで実行すると、imageに含まれているファイルのリストを出力する事ができます。

$ docker save gcr.io/distroless/nodejs:14 | dlayer > nodejs-14.log
$ docker save gcr.io/distroless/nodejs:14-debug | dlayer > nodejs-14-debug.log

差分は以下でした。busyboxだけですね。

$ diff -u nodejs-14.log nodejs-14-debug.log
--- nodejs-14.log	2021-06-02 00:24:40.000000000 +0900
+++ nodejs-14-debug.log	2021-06-02 00:24:52.000000000 +0900
@@ -208,6 +208,110 @@

 ========================================================
+ 1.1 MB 	 $ bazel build ...
+========================================================
+ 1.1 MB 	 busybox/busybox
+   0  B 	 busybox/[
+   0  B 	 busybox/[[
+   0  B 	 busybox/acpid
+   0  B 	 busybox/add-shell
+   0  B 	 busybox/addgroup
+   0  B 	 busybox/adduser
+   0  B 	 busybox/adjtimex
+   0  B 	 busybox/ar
+   0  B 	 busybox/arp
+   0  B 	 busybox/arping
+   0  B 	 busybox/ash
+   0  B 	 busybox/awk
+   0  B 	 busybox/base64
+   0  B 	 busybox/basename
+   0  B 	 busybox/blkdiscard
+   0  B 	 busybox/blkid
+   0  B 	 busybox/blockdev
+   0  B 	 busybox/bootchartd
+   0  B 	 busybox/brctl
+   0  B 	 busybox/bunzip2
+   0  B 	 busybox/bzcat
+   0  B 	 busybox/bzip2
+   0  B 	 busybox/cal
+   0  B 	 busybox/cat
+   0  B 	 busybox/chat
+   0  B 	 busybox/chattr
+   0  B 	 busybox/chgrp
+   0  B 	 busybox/chmod
+   0  B 	 busybox/chown
+   0  B 	 busybox/chpasswd
+   0  B 	 busybox/chpst
+   0  B 	 busybox/chroot
+   0  B 	 busybox/chrt
+   0  B 	 busybox/chvt
+   0  B 	 busybox/cksum
+   0  B 	 busybox/clear
+   0  B 	 busybox/cmp
+   0  B 	 busybox/comm
+   0  B 	 busybox/conspy
+   0  B 	 busybox/cp
+   0  B 	 busybox/cpio
+   0  B 	 busybox/crond
+   0  B 	 busybox/crontab
+   0  B 	 busybox/cryptpw
+   0  B 	 busybox/cttyhack
+   0  B 	 busybox/cut
+   0  B 	 busybox/date
+   0  B 	 busybox/dc
+   0  B 	 busybox/dd
+   0  B 	 busybox/deallocvt
+   0  B 	 busybox/delgroup
+   0  B 	 busybox/deluser
+   0  B 	 busybox/depmod
+   0  B 	 busybox/devmem
+   0  B 	 busybox/df
+   0  B 	 busybox/dhcprelay
+   0  B 	 busybox/diff
+   0  B 	 busybox/dirname
+   0  B 	 busybox/dmesg
+   0  B 	 busybox/dnsd
+   0  B 	 busybox/dnsdomainname
+   0  B 	 busybox/dos2unix
+   0  B 	 busybox/dpkg
+   0  B 	 busybox/dpkg-deb
+   0  B 	 busybox/du
+   0  B 	 busybox/dumpkmap
+   0  B 	 busybox/dumpleases
+   0  B 	 busybox/echo
+   0  B 	 busybox/ed
+   0  B 	 busybox/egrep
+   0  B 	 busybox/eject
+   0  B 	 busybox/env
+   0  B 	 busybox/envdir
+   0  B 	 busybox/envuidgid
+   0  B 	 busybox/expand
+   0  B 	 busybox/expr
+   0  B 	 busybox/factor
+   0  B 	 busybox/fakeidentd
+   0  B 	 busybox/false
+   0  B 	 busybox/fatattr
+   0  B 	 busybox/fbset
+   0  B 	 busybox/fbsplash
+   0  B 	 busybox/fdflush
+   0  B 	 busybox/fdformat
+   0  B 	 busybox/fdisk
+   0  B 	 busybox/fgconsole
+   0  B 	 busybox/fgrep
+   0  B 	 busybox/find
+   0  B 	 busybox/findfs
+   0  B 	 busybox/flash_eraseall
+   0  B 	 busybox/flash_lock
+   0  B 	 busybox/flash_unlock
+   0  B 	 busybox/flashcp
+   0  B 	 busybox/flock
+   0  B 	 busybox/fold
+   0  B 	 busybox/free
+   0  B 	 busybox/freeramdisk
+   0  B 	 busybox/fsck
+   0  B 	 busybox/fsck.minix
+
+========================================================
  2.0 MB 	 $ bazel build ...
 ========================================================

以上です。