Docker Desktop 4.18がリリースされてこのバージョンでDocker Scoutが使えるようになったようなので、早速触ってみました。
Docker Desktop 4.18の主な変更点の一つであるDocker Scoutは、Dockerでコンテナイメージのスキャンをしてイメージの脆弱性をあぶり出す機能です。Docker Desktopで使う場合はGUIとコマンドラインベースのCLIコマンドとして機能を実装しており、一つ前のDocker Desktop 4.17からCLI周りが機能強化されています。
例えばDockerに存在するイメージをDocker DesktopのGUIから閲覧すると、次のように表示されます。
4.17で追加された右上の「Recommended fixed」を選択して現れるウィンドウでは、現在のコンテナイメージで利用するベースイメージの問題点の洗い出し、現在メンテナンスされているベースイメージのついての確認、ベースイメージを更新することによるメリットなどを確認できるようです。
イメージのリンクをクリックすると、より詳細に脆弱性情報を閲覧できるImage Vulnerability Databaseのページを表示できます(ここは4.18での改善の一つです)。 メンテナンスが行き届いたイメージの場合は次のように何も表示されませんが、
イメージによっては次のような感じで表示されます。
Docker ScanとDocker Scout
このような機能は以前のバージョンのDocker Desktopでもあったと思うのですが、Docker Scoutは旧来のDocker Scanに変わる機能になっているようで、両者の違いはバックエンドで使っているエンジンの違いのようです。
実際旧来の機能ベースのDocker Scanコマンドを実行してみると、Snykのエンジンを使ってコンテナイメージのセキュリティ脆弱性をスキャンする機能であることがわかります。おおっと、サービス終了までもう時間がないですね。
% docker scan │ The docker scan command is deprecated and will no longer be supported after April 13th, 2023. │ Run the docker scout cves command to continue to get vulnerabilities on your images or install the │ Snyk CLI. │ See https://www.docker.com/products/docker-scout for more details. Docker Scan relies upon access to Snyk, a third party provider, do you consent to proceed using Snyk? (y/N)
一方、Docker Scoutは独自エンジンを使っているようです。Docker Desktopで使った限りでは以前のものと同じように使えるので困ることはないはずです。Docker Desktop 4.17ではcvesとversionオプションだけが実装されていましたが、4.18ではいくつか増えていました。 これらはGUIで利用できる機能をCLIに実装した形だと思われます。
% docker sc... scan -- Docker Scan (Docker Inc., v0.25.0) scout -- Command line tool for Docker Scout (Docker Inc., v0.9.0) % docker scout Usage: docker scout COMMAND Command line tool for Docker Scout Commands: compare [early preview] Compare two images and display differences cves Display CVEs identified in a software artifact quickview Quick overview of an image recommendations Display available base image updates and remediation recommendations version Show Docker Scout version information Run 'docker scout COMMAND --help' for more information on a command.
例えばわざと古いバージョンのイメージでスキャンすると、こんなに多くの既知の脆弱性を確認できます(とはいえ多すぎるので、省略しますが)。ここで確認できる情報はDocker DesktopのGUIからも確認できます。
% docker scout cves nginx:1.18-alpine ✓ SBOM of image already cached, 50 packages indexed ✗ Detected 8 vulnerable packages with a total of 29 vulnerabilities 1C 2H 3M 2L curl 7.67.0-r3 pkg:apk/alpine/curl@7.67.0-r3?os_name=alpine&os_version=3.11 ✗ CRITICAL CVE-2021-22945 [Double Free] https://dso.docker.com/cve/CVE-2021-22945 Affected range : <7.79.0-r0 Fixed version : 7.79.0-r0 CVSS Score : 9.1 CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H ✗ HIGH CVE-2021-22946 [Cleartext Transmission of Sensitive Information] https://dso.docker.com/cve/CVE-2021-22946 Affected range : <7.79.0-r0 Fixed version : 7.79.0-r0 CVSS Score : 7.5 CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N ✗ HIGH CVE-2021-22926 [Improper Certificate Validation] https://dso.docker.com/cve/CVE-2021-22926 Affected range : <7.67.0-r5 Fixed version : 7.67.0-r5 CVSS Score : 7.5 CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H ... The image contains 8 packages with one or more vulnerability for a total of 29 vulnerabilities LOW | 2 MEDIUM | 8 HIGH | 15 CRITICAL | 4
Docker Scoutに追加されたコマンドを触ってみる
せっかくなので、そのほか4.18で実装されたオプションも使ってみることにしましょう。
docker scout quickview
はイメージ脆弱性を概要でまとめてくれるようです。これ好き。
docker scout recommendations
を実行すると以下のGUIで確認できる内容と同じ情報を...
次のようにコマンドラインで確認できるというもののようです。
% docker scout recommendations nginx:1.18-alpine ✓ SBOM of image already cached, 50 packages indexed Recommended fixes for image nginx:1.18-alpine Base image is alpine:3.11 Name │ 3.11.11 Digest │ sha256:852ed96728fdb6b5fefaa8a0a7b0fbee60bd988c549a325c1b102923de431261 Vulnerabilities │ 3C 10H 1M 0L Pushed │ 2 years ago Size │ 2.7 MB Packages │ 18 OS │ 3.11.11 Refresh base image Rebuild the image using a newer base image version. Updating this may result in breaking changes. ✓ This image version is up to date. Change base image Select the tag you would like to see recommendations for. The list displays new recommended tags in descending order, where the top results are rated as most suitable. Tag │ Details │ Pushed │ Vulnerabilities ──────────────────────────┼──────────────────────────────────────────────────────────────────┼────────────┼────────────────────────────── 3.17 │ Benefits: │ 1 week ago │ 0C 0H 0M 0L Tag is preferred tag │ • Minor OS version update │ │ -3 -10 -1 Also known as: │ • Tag is preferred tag │ │ • 3.17.3 │ • Tag was pushed more recently │ │ • 3 │ • Image has similar size │ │ • latest │ • Tag is latest │ │ │ • Image introduces no new vulnerability but removes 14 │ │ │ • Image contains similar number of packages │ │ │ • 3.17 is the fifth most popular tag with 152K pulls per month │ │ │ │ │ │ Image details: │ │ │ • Size: 3.3 MB │ │ │ • OS: 3.17.3 │ │ ...
Docker ScanはSnykのAPIを使っている都合上、API利用に制限がありました。Docker ScoutはDockerのサービスのひとつなのでその点安心して使うことができます。 しかしDocker Scoutについて懸念点がないわけではありません。次のサイトがDocker Scoutのプロジェクトサイトなのですが、現在はEarly access Product なので特に無料でフル機能を使えていますが、将来的にはプライスプランが提示されるようです。
現行はDockerのライセンスとは別にする方針のようにみえます。これがDocker Pro,Team, Businessとかのライセンスに統合されれば嬉しいんですけどね。今後の動きに注目かもしれません。
10/5追記
10/4のDocker公式ブログによると、Docker ScoutがGAを迎えたようです。
気になるライセンスについてですが、こちらによるとローカルイメージのスキャンについてはリミットなしで使うことができるそうですね。標準機能でここまで使えるのはなかなか良いなと思います。
おまけ
Snykのエンジンを使ったコンテナイメージのスキャンについては、Docker Extensionsが提供されているので、それを使う形に今後はなると思います。docker scanコマンドについては今後のアップデートで削除されるのかなと思います。
Docker Desktop 4.18にアップデートしたら、Docker DesktopにDisk UsageというDocker Extensionsをおすすめされたので入れてみました。Dockerイメージのキャッシュとかゴミなどを簡単にクリーンアップしてくれるものみたいです。docker system prune -a
やdocker image prune -a
などのコマンドでやっていたことがボタンポチでできてかなり良かったです。
なお、Docker Desktop 4.18ではバージョン1.25.4のKubernetesクラスターを実行できる機能が用意されています。コンテナベースのアプリケーション開発に便利そうです。また次のDocker公式ブログ記事の機能「Container File Explorer」にあるように、コンテナの中のファイルの確認が可能になっています。これまでは色々なサードパーティのツールを使ってしかできなかったことが、次々Docker Desktopに実装されていますね。