关于 implementing-container-image-minimal-base-with-distroless
面向容器开发与安全团队的实施指南,介绍如何使用 Distroless 构建精简容器镜像。内容包括多阶段构建、镜像选择,以及在无 Shell 环境下调试容器的方法。
主要功能
- 01介绍多种语言的 Distroless 镜像
- 02提供多阶段构建模式
- 03说明精简镜像的安全影响
- 04介绍无 Shell 容器调试方法
- 05展示镜像扫描与层检查
适用场景
- 01为应用构建精简运行时镜像
- 02减少容器内不必要的系统组件
- 03排查无法使用 Shell 的容器
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill implementing-container-image-minimal-base-with-distroless安装后在 Claude Code 中输入/implementing-container-image-minimal-base-with-distroless确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py详细介绍
使用 Distroless 实现容器镜像最小基础镜像
概述
Google distroless 镜像仅包含你的应用及其运行时依赖,不包含包管理器、shell 或标准 Linux 发行版中的其他程序。通过去除不必要的操作系统组件,distroless 镜像相比 ubuntu 或 debian 等传统基础镜像,可将攻击面减少高达 95%。包括 Kubernetes 本身、Knative 和 Tekton 在内的主要项目都在生产环境中使用 distroless 镜像。截至 2025 年,Docker 还提供了 Hardened Images(DHI),作为最小容器基础镜像的开源替代方案。
何时使用
- 在环境中部署或配置使用 distroless 能力的容器镜像最小基础镜像时
- 在建立符合合规要求的安全控制时
- 在为该领域构建或改进安全架构时
- 在执行需要此实现的安全评估时
前提条件
- Docker 20.10+ 或兼容的容器构建工具(Buildah、Kaniko)
- 多阶段 Dockerfile 知识
- 应用编译为静态二进制文件或捆绑了运行时
- 用于镜像存储的容器镜像仓库
可用的 Distroless 镜像
| 镜像 | 使用场景 | 大小 |
|---|---|---|
gcr.io/distroless/static-debian12 | 静态编译的二进制文件(Go、Rust) | ~2MB |
gcr.io/distroless/base-debian12 | 需要 glibc 的动态链接二进制文件 | ~20MB |
gcr.io/distroless/cc-debian12 | 需要 libstdc++ 的 C/C++ 应用 | ~25MB |
gcr.io/distroless/java21-debian12 | Java 21 应用 | ~220MB |
gcr.io/distroless/python3-debian12 | Python 3 应用 | ~50MB |
gcr.io/distroless/nodejs22-debian12 | Node.js 22 应用 | ~130MB |
多阶段构建模式
Go 应用
# Build stage
FROM golang:1.22-bookworm AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /server ./cmd/server
# Runtime stage - static distroless
FROM gcr.io/distroless/static-debian12:nonroot
COPY --from=builder /server /server
USER nonroot:nonroot
ENTRYPOINT ["/server"]
Java 应用
# Build stage
FROM maven:3.9-eclipse-temurin-21 AS builder
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn package -DskipTests
# Runtime stage - Java distroless
FROM gcr.io/distroless/java21-debian12:nonroot
COPY --from=builder /app/target/app.jar /app.jar
USER nonroot:nonroot
ENTRYPOINT ["java", "-jar", "/app.jar"]
Python 应用
# Build stage
FROM python:3.12-bookworm AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --target=/deps -r requirements.txt
COPY . .
# Runtime stage - Python distroless
FROM gcr.io/distroless/python3-debian12:nonroot
WORKDIR /app
COPY --from=builder /deps /deps
COPY --from=builder /app /app
ENV PYTHONPATH=/deps
USER nonroot:nonroot
ENTRYPOINT ["python3", "/app/main.py"]
Node.js 应用
# Build stage
FROM node:22-bookworm AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
# Runtime stage - Node distroless
FROM gcr.io/distroless/nodejs22-debian12:nonroot
WORKDIR /app
COPY --from=builder /app .
USER nonroot:nonroot
CMD ["server.js"]
安全优势
攻击面对比
| 组件 | Ubuntu | Alpine | Distroless |
|---|---|---|---|
| Shell(bash/sh) | 是 | 是 | 否 |
| 包管理器 | apt | apk | 否 |
| coreutils | 完整 | BusyBox | 否 |
| curl/wget | 是 | 是 | 否 |
| 用户管理 | 是 | 是 | 否 |
| 已知 CVE(典型) | 50-200+ | 5-20 | 0-5 |
| 镜像大小(基础) | ~77MB | ~7MB | ~2-20MB |
安全影响
- 无 shell:攻击者无法 exec 进入容器来运行命令
- 无包管理器:无法安装额外工具或恶意软件
- 无 coreutils:没有
cat、ls、find、curl用于侦察 - 极少的 CVE:包越少意味着需要修补的漏洞越少
- 默认非 root:
:nonroot标签以 UID 65534 运行
调试 Distroless 容器
由于 distroless 没有 shell,请使用以下技术进行调试:
调试镜像变体
# Use debug variant in non-production environments only
FROM gcr.io/distroless/base-debian12:debug
# Includes busybox shell at /busybox/sh
# Exec into debug variant
kubectl exec -it pod-name -- /busybox/sh
临时调试容器(Kubernetes 1.25+)
# Attach a debug container with full tooling
kubectl debug -it pod-name --image=busybox:1.36 --target=app-container
使用 Crane/Dive 检查镜像
# Inspect image layers without running
crane export gcr.io/distroless/static-debian12 - | tar -tf - | head -50
# Analyze image layers
dive gcr.io/distroless/static-debian12
镜像扫描结果
使用 Trivy 的典型漏洞对比:
# Scan Ubuntu-based image
trivy image myapp:ubuntu
# Result: 47 vulnerabilities (3 CRITICAL, 12 HIGH)
# Scan Distroless-based image
trivy image myapp:distroless
# Result: 2 vulnerabilities (0 CRITICAL, 0 HIGH)
参考资料
评论
支持 Markdown