mcpField
I
implementing-container-image-minimal-base-with-distroless

implementing-container-image-minimal-base-with-distroless

github.com/mukul975安全35.2k72 次安装8 周前更新
代码仓库

关于 implementing-container-image-minimal-base-with-distroless

面向容器开发与安全团队的实施指南,介绍如何使用 Distroless 构建精简容器镜像。内容包括多阶段构建、镜像选择,以及在无 Shell 环境下调试容器的方法。

主要功能

  1. 01介绍多种语言的 Distroless 镜像
  2. 02提供多阶段构建模式
  3. 03说明精简镜像的安全影响
  4. 04介绍无 Shell 容器调试方法
  5. 05展示镜像扫描与层检查

适用场景

  1. 01为应用构建精简运行时镜像
  2. 02减少容器内不必要的系统组件
  3. 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 外,安装时一起下载的参考资料和脚本。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.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-debian12Java 21 应用~220MB
gcr.io/distroless/python3-debian12Python 3 应用~50MB
gcr.io/distroless/nodejs22-debian12Node.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"]

安全优势

攻击面对比
组件UbuntuAlpineDistroless
Shell(bash/sh)是是否
包管理器aptapk否
coreutils完整BusyBox否
curl/wget是是否
用户管理是是否
已知 CVE(典型)50-200+5-200-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