Dockle - 用于安全的容器镜像检查工具,帮助构建最佳实践的Docker镜像,易于上手
Dockle 帮助你:
参见 [安装](#installation) 和 [常见示例](#common-examples)
<img src="https://assets.kitploit.com/production/public/readmes/4137/343598bd4d53296c6d6d23acde8c2917d5727f03e7b3a34c1ff0865c435bb974.png" width="800">
# 检查点对比
<img src="https://assets.kitploit.com/production/public/readmes/4137/4f4835c3a5fd70f436d9d8ea656fd8a521112fece4e35977288064d3f6f4510a.png" width="800">
<img src="https://assets.kitploit.com/production/public/readmes/4137/7bee9da0b061957af6a175a3b975dca82813c27f72ab6921dfe8ab2d6747322b.png" width="800">
# 目录
- [特性](#features)
- [对比](#comparison)
- [安装](#installation)
- [Homebrew (Mac OS X / Linux 和 WSL)](#homebrew-mac-os-x--linux-and-wsl)
- [RHEL/CentOS](#rhelcentos)
- [Debian/Ubuntu](#debianubuntu)
- [Arch Linux](#arch-linux)
- [Windows](#windows)
- [Microsoft PowerShell 7](#microsoft-powershell-7)
- [二进制](#binary)
- [asdf](#asdf)
- [mise](#mise)
- [源码编译](#from-source)
- [使用 Docker](#use-docker)
- [快速开始](#quick-start)
- [基础](#basic)
- [Docker](#docker)
- [检查点概述](#checkpoint-summary)
- [常见示例](#common-examples)
- [扫描镜像](#scan-an-image)
- [扫描镜像文件](#scan-an-image-file)
- [以 JSON 格式获取或保存结果](#get-or-save-the-results-as-json)
- [以 SARIF 格式获取或保存结果](#get-or-save-the-results-as-sarif)
- [指定退出码](#specify-exit-code)
- [指定退出级别](#specify-exit-level)
- [忽略指定的检查点](#ignore-the-specified-checkpoints)
- [接受可疑的环境变量 / 文件 / 文件扩展名](#accept-suspicious-environment-variables--files--file-extensions)
- [拒绝可疑的环境变量 / 文件 / 文件扩展名](#reject-suspicious-environment-variables--files--file-extensions)
- [持续集成 (CI)](#continuous-integration-ci)
- [GitHub Action](#github-action)
- [Travis CI](#travis-ci)
- [CircleCI](#circleci)
- [GitLab CI](#gitlab-ci)
- [私有 Docker 仓库的认证](#authorization-for-private-docker-registry)
- [Docker Hub](#docker-hub)
- [Amazon ECR (Elastic Container Registry)](#amazon-ecr-elastic-container-registry)
- [GCR (Google Container Registry)](#gcr-google-container-registry)
- [自托管仓库 (BasicAuth)](#self-hosted-registry-basicauth)
- [贡献者](#contributors)
- [代码贡献者](#code-contributors)
- [财务贡献者](#financial-contributors)
- [个人](#individuals)
- [组织](#organizations)
- [许可证](#license)
- [作者](#author)
# 特性
- 检测容器漏洞
- 帮助构建最佳实践的 Dockerfile
- 使用简单
- 仅需指定镜像名称
- 参见 [快速开始](#quick-start) 和 [常见示例](#common-examples)
- 支持 CIS 基准
- 高准确度
- DevSecOps
- 适用于 CI,如 Travis CI、CircleCI、Jenkins 等
- 参见 [CI 示例](#continuous-integration-ci)
# 对比
| | [Dockle](https://github.com/goodwithtech/dockle) | [Hadolint](https://github.com/hadolint/hadolint) | [Docker Bench for Security](https://github.com/docker/docker-bench-security) | [Clair](https://github.com/coreos/clair) |
|--- |---:|---:|---:|---:|
| 目标 | 镜像 | Dockerfile | 主机<br/>Docker 守护进程<br/>镜像<br/>容器运行时 | 镜像 |
| 运行方式 | 二进制 | 二进制 | Shell 脚本 | 二进制 |
| 依赖 | 无 | 无 | 一些依赖 | 无 |
| CI 适用性 | ✓ | ✓ | x | x |
| 目的 | 安全审计<br/>Dockerfile 检查 | Dockerfile 检查 | 安全审计<br/>Dockerfile 检查 | 漏洞扫描 |
# 安装
## Homebrew (Mac OS X / Linux 和 WSL)
你可以在 [Mac OS X](https://brew.sh/) 或 [Linux 和 WSL(Windows Subsystem for Linux)](https://docs.brew.sh/Homebrew-on-Linux) 上使用 Homebrew。```bash
$ brew install goodwithtech/r/dockle
VERSION=$(
curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" |
grep '"tag_name":' |
sed -E 's/."v([^"]+)"./\1/'
) && rpm -ivh https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.rpm
## Debian/Ubuntu```bash
VERSION=$(
curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" | \
grep '"tag_name":' | \
sed -E 's/.*"v([^"]+)".*/\1/' \
) && curl -L -o dockle.deb https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.deb
$ sudo dpkg -i dockle.deb && rm dockle.deb
可以通过Arch用户软件仓库使用dockle或dockle-bin包来安装dockle。```
git clone https://aur.archlinux.org/dockle-bin.git
cd dockle-bin
makepkg -sri
## Windows```bash
VERSION=$(
curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" | \
grep '"tag_name":' | \
sed -E 's/.*"v([^"]+)".*/\1/' \
) && curl -L -o dockle.zip https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Windows-64bit.zip
$ unzip dockle.zip && rm dockle.zip
$ ./dockle.exe [IMAGE_NAME]
if (((Invoke-WebRequest "https://api.github.com/repos/goodwithtech/dockle/releases/latest").Content) -match '"tag_name":"v(?[^"]+)"') { $VERSION=$Matches.ver && Invoke-WebRequest "https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Windows-64bit.zip" -OutFile dockle.zip && Expand-Archive dockle.zip && Remove-Item dockle.zip }
## Binary
你可以从 [releases 页面](https://github.com/goodwithtech/dockle/releases/latest) 获取最新版本的二进制文件。
下载适用于你操作系统/架构的归档文件。解压归档,并将二进制文件放到你的 `$PATH` 中的某个位置(在类 UNIX 系统上,通常是 `/usr/local/bin` 或类似路径)。
- 注意:确保其可执行位已开启。(`chmod +x dockle`)
## asdf
你可以通过 [asdf 版本管理器](https://asdf-vm.com/) 和这个 [插件](https://github.com/mathew-fleisch/asdf-dockle) 来安装 dockle,该插件自动化了安装(以及切换)各种版本 GitHub 发布二进制文件的过程。在已安装 asdf 的情况下,运行以下命令来安装 dockle:```bash
# Add dockle plugin
asdf plugin add dockle
# Show all installable versions
asdf list-all dockle
# Install specific version
asdf install dockle latest
# Set a version globally (on your ~/.tool-versions file)
asdf global dockle latest
# Now dockle commands are available
dockle --version
你可以使用 mise(多语言工具版本管理器)来安装 dockle。在已安装 mise 的情况下,运行以下命令来安装 dockle:```bash
mise ls-remote dockle
mise install dockle@latest
mise use -g dockle@latest
dockle --version
## 从源码```bash
$ GO111MODULE=off go get github.com/goodwithtech/dockle/cmd/dockle
$ cd $GOPATH/src/github.com/goodwithtech/dockle && GO111MODULE=on go build -o $GOPATH/bin/dockle cmd/dockle/main.go
Docker Hub 上也有一个 Dockle 镜像。你可以在安装命令之前试用 dockle。```
$ VERSION=$(
curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" |
grep '"tag_name":' |
sed -E 's/."v([^"]+)"./\1/'
) && docker run --rm -v /var/run/docker.sock:/var/run/docker.sock
goodwithtech/dockle:v${VERSION} [YOUR_IMAGE_NAME]
当你想要扫描主机上的镜像时,你只需要 `-v /var/run/docker.sock:/var/run/docker.sock`。
# 快速开始
## 基础