3.9 构建镜像最佳实践
安全扫描
构建镜像后,最好使用docker scan
命令扫描它以查找安全漏洞。Docker 与Snyk合作提供漏洞扫描服务。
笔记
您必须登录到 Docker Hub 才能扫描镜像。运行命令
docker scan --login
,然后使用扫描镜像docker scan <image-name>
。
例如,要扫描您之前在教程中创建的镜像getting-started
,您只需键入
$ docker scan getting-started
扫描使用不断更新的漏洞数据库,因此您看到的输出会随着新漏洞的发现而变化,但它可能看起来像这样:
✗ Low severity vulnerability found in freetype/freetype
Description: CVE-2020-15999
Info: https://snyk.io/vuln/SNYK-ALPINE310-FREETYPE-1019641
Introduced through: freetype/freetype@2.10.0-r0, gd/libgd@2.2.5-r2
From: freetype/freetype@2.10.0-r0
From: gd/libgd@2.2.5-r2 > freetype/freetype@2.10.0-r0
Fixed in: 2.10.0-r1
✗ Medium severity vulnerability found in libxml2/libxml2
Description: Out-of-bounds Read
Info: https://snyk.io/vuln/SNYK-ALPINE310-LIBXML2-674791
Introduced through: libxml2/libxml2@2.9.9-r3, libxslt/libxslt@1.1.33-r3, nginx-module-xslt/nginx-module-xslt@1.17.9-r1
From: libxml2/libxml2@2.9.9-r3
From: libxslt/libxslt@1.1.33-r3 > libxml2/libxml2@2.9.9-r3
From: nginx-module-xslt/nginx-module-xslt@1.17.9-r1 > libxml2/libxml2@2.9.9-r3
Fixed in: 2.9.9-r4
输出列出了漏洞的类型、用于了解更多信息的 URL,以及重要的相关库的哪个版本修复了漏洞。
还有其他几个选项,您可以在docker scan 文档中阅读。
除了在命令行上扫描您新建的镜像,您还可以配置 Docker Hub 自动扫描所有新推送的镜像,然后您可以在 Docker Hub 和 Docker Desktop 中看到结果。
镜像分层
您知道您可以查看镜像的构成要素吗?使用该docker image history
命令,您可以看到用于在镜像中创建每个图层的命令。
-
使用该
docker image history
命令查看getting-started
您在本教程之前创建的镜像中的图层。$ docker image history getting-started
您应该得到看起来像这样的输出(日期/ID 可能不同)。
IMAGE CREATED CREATED BY SIZE COMMENT a78a40cbf866 18 seconds ago /bin/sh -c #(nop) CMD ["node" "src/index.j… 0B f1d1808565d6 19 seconds ago /bin/sh -c yarn install --production 85.4MB a2c054d14948 36 seconds ago