# 镜像扫描与安全检查

URL: https://caijiao.org/docker/cicd/security-scanning
Source: docs/docker/cicd/security-scanning.md
Description: 本章节介绍 Docker 镜像安全扫描与检查方法，包括使用官方工具、第三方扫描器和 CI 集成，实现镜像漏洞发现、依赖安全检测及安全策略管理，保障容器运行安全。

Docker 镜像可能包含安全漏洞和不安全依赖，定期扫描和安全检查是容器安全管理的重要环节。

## 1. 为什么需要镜像扫描

- 镜像可能含有已知漏洞软件包
- 发现安全漏洞可防止容器被攻击
- 遵守企业安全合规要求

## 2. 官方工具：Docker Scan

- Docker CLI 内置扫描功能，基于 Snyk：

```bash
docker scan myimage:latest
````

- 功能：

  - 检测操作系统和应用依赖漏洞
  - 提供漏洞详细信息和修复建议

## 3. 使用第三方扫描工具

### 3.1 Trivy

- 轻量级安全扫描器：

```bash
trivy image myimage:latest
```

- 支持：

  - 漏洞扫描（OS & 应用依赖）
  - 配置文件安全检查（CIS Docker Benchmark）

### 3.2 Clair / Anchore

- 集成 CI/CD，自动扫描镜像并生成报告
- 支持多种注册表和策略管理

## 4. CI/CD 集成扫描示例

- GitHub Actions 使用 Trivy：

```yaml
jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Trivy
        uses: aquasecurity/trivy-action@master
      - name: Scan Docker image
        with:
          image-ref: myusername/myapp:latest
```

- GitLab CI 集成：

```yaml
scan_image:
  stage: test
  image:
    name: aquasec/trivy:latest
  script:
    - trivy image myregistry/myapp:latest
```

## 5. 安全检查最佳实践

- 使用轻量基础镜像（Alpine、Slim）
- 多阶段构建减少不必要依赖
- 定期扫描镜像并修复漏洞
- 在 CI/CD 流程中强制镜像扫描
- 对生产环境镜像使用签名验证（Docker Content Trust）

---

通过镜像扫描与安全检查，可以及早发现和修复漏洞，提高容器安全性，保障生产环境的稳定可靠运行。
