Builds minimal Docker images using Google Distroless bases for Go, Java, Python, Node.js apps to reduce container attack surface by eliminating shells, package managers, and OS tools. For secure K8s deployments.
npx claudepluginhub killvxk/cybersecurity-skills-zhThis skill uses the workspace's default tool permissions.
Google distroless 镜像仅包含应用程序及其运行时依赖项,不包含包管理器、shell 或标准 Linux 发行版中的其他程序。通过消除不必要的 OS 组件,distroless 镜像与 ubuntu 或 debian 等传统基础镜像相比,攻击面减少高达 95%。Kubernetes 本身、Knative 和 Tekton 等主要项目在生产中使用 distroless 镜像。截至 2025 年,Docker 也提供了 Hardened Images (DHI) 作为最小容器基础的开源替代方案。
Builds minimal container images on Google distroless bases to reduce attack surface. Includes multi-stage Dockerfiles for Go, Java, Python, Node.js apps.
Builds minimal container images using Google distroless bases to reduce attack surface by removing shells, package managers, and OS utilities for secure Docker/Kubernetes deployments.
Hardens Docker container images using multi-stage builds, distroless bases, non-root users, package removal, and CIS benchmarks for minimal attack surface and production security.
Share bugs, ideas, or general feedback.
Google distroless 镜像仅包含应用程序及其运行时依赖项,不包含包管理器、shell 或标准 Linux 发行版中的其他程序。通过消除不必要的 OS 组件,distroless 镜像与 ubuntu 或 debian 等传统基础镜像相比,攻击面减少高达 95%。Kubernetes 本身、Knative 和 Tekton 等主要项目在生产中使用 distroless 镜像。截至 2025 年,Docker 也提供了 Hardened Images (DHI) 作为最小容器基础的开源替代方案。
| 镜像 | 使用场景 | 大小 |
|---|---|---|
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 |
# 构建阶段
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
# 运行阶段 - 静态 distroless
FROM gcr.io/distroless/static-debian12:nonroot
COPY --from=builder /server /server
USER nonroot:nonroot
ENTRYPOINT ["/server"]
# 构建阶段
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
# 运行阶段 - 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"]
# 构建阶段
FROM python:3.12-bookworm AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --target=/deps -r requirements.txt
COPY . .
# 运行阶段 - 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"]
# 构建阶段
FROM node:22-bookworm AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
# 运行阶段 - 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 |
cat、ls、find、curl 可用于侦察:nonroot 标签以 UID 65534 运行由于 distroless 没有 shell,使用以下技术进行调试:
# 仅在非生产环境中使用 debug 变体
FROM gcr.io/distroless/base-debian12:debug
# 包含位于 /busybox/sh 的 busybox shell
# 进入 debug 变体
kubectl exec -it pod-name -- /busybox/sh
# 附加一个带完整工具的调试容器
kubectl debug -it pod-name --image=busybox:1.36 --target=app-container
# 不运行即可检查镜像层
crane export gcr.io/distroless/static-debian12 - | tar -tf - | head -50
# 分析镜像层
dive gcr.io/distroless/static-debian12
使用 Trivy 的典型漏洞对比:
# 扫描基于 Ubuntu 的镜像
trivy image myapp:ubuntu
# 结果: 47 个漏洞(3 严重, 12 高危)
# 扫描基于 Distroless 的镜像
trivy image myapp:distroless
# 结果: 2 个漏洞(0 严重, 0 高危)