Help us learn about your current experience with the documentation. Take the survey.
教程:扫描 Docker 容器以发现漏洞
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
您可以使用 容器扫描 来检查存储在 容器注册表 中的容器镜像是否存在漏洞。
容器扫描配置会添加到项目的流水线配置中。在本教程中,您将:
- 创建一个新项目。
- 向项目中添加一个
Dockerfile文件。这个Dockerfile包含创建 Docker 镜像所需的最小配置。 - 为新项目创建流水线配置,从
Dockerfile创建 Docker 镜像,构建并推送 Docker 镜像到容器注册表,然后扫描 Docker 镜像以发现漏洞。 - 检查报告的漏洞。
- 更新 Docker 镜像 并扫描更新后的镜像。
创建新项目
要创建新项目:
- 在左侧边栏顶部,选择 新建 ( ) 和 新项目/仓库。
- 选择 创建空白项目。
- 在 项目名称 中,输入
Tutorial container scanning project。 - 在 项目 URL 中,为项目选择一个命名空间。
- 选择 创建项目。
向新项目添加 Dockerfile
为了让容器扫描有内容可扫描,请创建一个配置非常简单的 Dockerfile:
-
在您的
Tutorial container scanning project项目中,选择 > 新建文件。 -
输入文件名
Dockerfile,并提供以下文件内容:FROM hello-world:latest
从此 Dockerfile 创建的 Docker 镜像基于 hello-world Docker 镜像。
- 选择 提交更改。
创建流水线配置
现在您可以创建流水线配置了。该流水线配置:
- 从
Dockerfile文件构建 Docker 镜像,并将 Docker 镜像推送到容器注册表。build-image作业使用 Docker-in-Docker 作为 CI/CD 服务 来构建 Docker 镜像。 - 包含
Container-Scanning.gitlab-ci.yml模板,用于扫描存储在容器注册表中的 Docker 镜像。
要创建流水线配置:
-
在项目的根目录中,选择 > 新建文件。
-
输入文件名
.gitlab-ci.yml,并提供以下文件内容:include: - template: Jobs/Container-Scanning.gitlab-ci.yml container_scanning: variables: CS_IMAGE: $CI_REGISTRY_IMAGE/tutorial-image build-image: image: docker:24.0.2 stage: build services: - docker:24.0.2-dind script: - docker build --tag $CI_REGISTRY_IMAGE/tutorial-image --file Dockerfile . - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY - docker push $CI_REGISTRY_IMAGE/tutorial-image -
选择 提交更改。
您几乎完成了。提交文件后,会启动一个使用此配置的新流水线。 完成后,您可以检查扫描结果。
检查报告的漏洞
扫描的漏洞位于运行该扫描的流水线上。要检查报告的漏洞:
- 选择 CI/CD > 流水线,然后选择最新的流水线。此流水线应包含在
test阶段名为container_scanning的作业。 - 如果
container_scanning作业成功,选择 安全 选项卡。如果发现任何漏洞,它们会列在该页面上。
更新 Docker 镜像
基于 hello-world:latest 的 Docker 镜像不太可能显示任何漏洞。要查看一个报告漏洞的扫描示例:
- 在项目的根目录中,选择现有的
Dockerfile文件。 - 选择 编辑。
- 将
FROM hello-world:latest替换为用于FROM指令的不同 Docker 镜像。最适合演示容器扫描的 Docker 镜像具有:- 操作系统包。例如,来自 Debian、Ubuntu、Alpine 或 Red Hat。
- 编程语言包。例如,NPM 包或 Python 包。
- 选择 提交更改。
提交文件更改后,会启动一个使用此更新后的 Dockerfile 的新流水线。完成后,您可以检查新扫描的结果。