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

您可以使用 容器扫描 来检查存储在 容器注册表 中的容器镜像是否存在漏洞。

容器扫描配置会添加到项目的流水线配置中。在本教程中,您将:

  1. 创建一个新项目
  2. 向项目中添加一个 Dockerfile 文件。这个 Dockerfile 包含创建 Docker 镜像所需的最小配置。
  3. 为新项目创建流水线配置,从 Dockerfile 创建 Docker 镜像,构建并推送 Docker 镜像到容器注册表,然后扫描 Docker 镜像以发现漏洞。
  4. 检查报告的漏洞
  5. 更新 Docker 镜像 并扫描更新后的镜像。

创建新项目

要创建新项目:

  1. 在左侧边栏顶部,选择 新建 ( plus ) 和 新项目/仓库
  2. 选择 创建空白项目
  3. 项目名称 中,输入 Tutorial container scanning project
  4. 项目 URL 中,为项目选择一个命名空间。
  5. 选择 创建项目

向新项目添加 Dockerfile

为了让容器扫描有内容可扫描,请创建一个配置非常简单的 Dockerfile

  1. 在您的 Tutorial container scanning project 项目中,选择 plus > 新建文件

  2. 输入文件名 Dockerfile,并提供以下文件内容:

    FROM hello-world:latest

从此 Dockerfile 创建的 Docker 镜像基于 hello-world Docker 镜像。

  1. 选择 提交更改

创建流水线配置

现在您可以创建流水线配置了。该流水线配置:

  1. Dockerfile 文件构建 Docker 镜像,并将 Docker 镜像推送到容器注册表。build-image 作业使用 Docker-in-Docker 作为 CI/CD 服务 来构建 Docker 镜像。
  2. 包含 Container-Scanning.gitlab-ci.yml 模板,用于扫描存储在容器注册表中的 Docker 镜像。

要创建流水线配置:

  1. 在项目的根目录中,选择 plus > 新建文件

  2. 输入文件名 .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
  3. 选择 提交更改

您几乎完成了。提交文件后,会启动一个使用此配置的新流水线。 完成后,您可以检查扫描结果。

检查报告的漏洞

扫描的漏洞位于运行该扫描的流水线上。要检查报告的漏洞:

  1. 选择 CI/CD > 流水线,然后选择最新的流水线。此流水线应包含在 test 阶段名为 container_scanning 的作业。
  2. 如果 container_scanning 作业成功,选择 安全 选项卡。如果发现任何漏洞,它们会列在该页面上。

更新 Docker 镜像

基于 hello-world:latest 的 Docker 镜像不太可能显示任何漏洞。要查看一个报告漏洞的扫描示例:

  1. 在项目的根目录中,选择现有的 Dockerfile 文件。
  2. 选择 编辑
  3. FROM hello-world:latest 替换为用于 FROM 指令的不同 Docker 镜像。最适合演示容器扫描的 Docker 镜像具有:
    • 操作系统包。例如,来自 Debian、Ubuntu、Alpine 或 Red Hat。
    • 编程语言包。例如,NPM 包或 Python 包。
  4. 选择 提交更改

提交文件更改后,会启动一个使用此更新后的 Dockerfile 的新流水线。完成后,您可以检查新扫描的结果。