kssd/dockerfiles

GitHub: kssd/dockerfiles

面向生产环境的安全多阶段 Dockerfile 模板集合,结合供应链加固指南和 LLM Agent 沙箱设计,帮助团队构建最小权限、可重现的容器镜像。

Stars: 0 | Forks: 0

# Dockerfile 模板 — 安全的多阶段生产镜像 用于构建**安全容器镜像**的参考 Dockerfile 和最佳实践指南:distroless、非 root、hadolint 干净、多阶段。Python 是首个涵盖的生态系统;Node、TypeScript、Go、Rust 和 JAX 已在计划中。 ## 可用的 Dockerfile 模板 ### Python Dockerfile 模板 默认基于 **Google Distroless** 的安全 Python Docker 镜像,并为需要签名/证明且每日重建镜像的用户提供 Chainguard 变体。此外还包含 AWS Lambda Python 容器镜像和用于 LLM 生成代码的 Agent 沙箱。 **Distroless (默认 — 可自由固定到版本化标签):** - pip → [dockerfiles/python/Dockerfile.python](dockerfiles/python/Dockerfile.python) - uv → [dockerfiles/python/Dockerfile.uv](dockerfiles/python/Dockerfile.uv) - Poetry → [dockerfiles/python/Dockerfile.poetry](dockerfiles/python/Dockerfile.poetry) **Chainguard (签名/证明;通过摘要固定兼容免费套餐):** - pip + Chainguard → [dockerfiles/python/Dockerfile.python.chainguard](dockerfiles/python/Dockerfile.python.chainguard) - uv + Chainguard → [dockerfiles/python/Dockerfile.uv.chainguard](dockerfiles/python/Dockerfile.uv.chainguard) - Poetry + Chainguard → [dockerfiles/python/Dockerfile.poetry.chainguard](dockerfiles/python/Dockerfile.poetry.chainguard) **专用运行时:** - AWS Lambda 容器镜像 → [dockerfiles/python/Dockerfile.lambda](dockerfiles/python/Dockerfile.lambda) - Agent 沙箱容器 → [dockerfiles/python/Dockerfile.sandbox](dockerfiles/python/Dockerfile.sandbox) 完整文档:[dockerfiles/python/README.md](dockerfiles/python/README.md)。 ### Node Dockerfile 模板 _(计划中)_ ### TypeScript Dockerfile 模板 _(计划中)_ ### Go Dockerfile 模板 _(计划中)_ ### Rust Dockerfile 模板 _(计划中)_ ### JAX Dockerfile 模板 _(计划中)_ ## 为什么需要这些 Dockerfile 模板 - **多阶段构建**将构建工具链排除在运行时镜像之外。 - 使用显式 `USER` 指令的**非 root 容器**。 - **固定的基础标签和锁定的依赖** — 可重现,对扫描器友好。 - 在 `warning` 阈值下是 **Hadolint 干净**的;CI 会强制执行此检查。 ## 仓库布局 - `dockerfiles/` — 按生态系统(例如 `python/`、`node/`、`go/`)组织的 Dockerfile 模板。 - `docs/` — 最佳实践指南(多阶段构建、镜像加固、缓存等)。 ## 指南 - [Docker 镜像的安全软件供应链](docs/supply-chain.md) — SBOMs、Cosign 签名、SLSA 来源以及 Kyverno 准入控制。适用于本仓库中的每一个生态系统。 ## 工具 需要 Node.js 20+(仅用于 lint 工具)以及 `PATH` 中的 [hadolint](https://github.com/hadolint/hadolint)。 ``` npm install # installs prettier + markdownlint-cli2 npm run lint # prettier check + markdownlint + hadolint npm run format # prettier --write ``` CI 会在每次推送和 PR 时运行相同的检查(`.github/workflows/lint.yml`)。 ## 面向 Agentic 应用及其组件的 Docker ### “大杂烩”的悖论与极简主义 传统的最佳实践/建议是移除应用程序运行不需要的所有内容。然而 AI Agent 需要广泛的工具集(CI 实用程序、Python 库、curl、git 等)。为了解决这个问题: - **Agent 宿主 (Controller)** 遵循严格的极简主义。该容器运行 LLM 推理循环。它不应包含任何系统工具,以防止被攻破的 Agent 突破限制。 - **执行沙箱** 一类预装了安全、经过验证的工具的新型胖镜像。 ### 生成代码的运行时安全性 Agent 经常编写并执行它们自己的代码。传统容器假设其中的代码是受信任的,但容器运行的是不受信任的(AI 生成的)代码。 - **默认无网络访问** 构建 Agent 执行镜像时,除非明确需要,否则不带网络驱动程序或具有限制的出站规则(在运行命令中使用 `--network none`)。 - **临时且只读** Agent 工作区应该是可随意丢弃的。使用带有挂载的临时 `/workspace` 卷的 `--read-only` 根文件系统,并在每次任务后被擦除。 ### MCP Docker 正在积极与 MCP 集成,MCP 是一种允许 Agent 发现并连接到数据源和工具的标准。 - **标准化入口点** 镜像现在需要暴露标准化的端点(如 MCP 服务器),以便 Agent 能够“发现”这些镜像能做什么。 - **Sidecar 模式** 无需在 Agent 的镜像中安装数据库客户端,而是让 Agent 与“MCP 网关”(代理对数据库安全访问的容器)一起运行。 ### 总结 | 特性 | 传统实践 | Agentic 实践 | | ------------ | ---------------------- | -------------------------------- | | 镜像内容 | 极简,仅包含应用依赖 | 双模态:微型控制器 vs 胖工具箱 |
标签:AWS Lambda, Chainguard, DevSecOps, Distroless, DLL 劫持, Docker, Dockerfile, Docker模板, GNU通用公共许可证, Go, Hadolint, JAX, LLM沙箱, NIDS, Node.js, pip, Poetry, Python, Ruby工具, Rust, TypeScript, uv, Web截图, 上游代理, 代码安全, 多阶段构建, 大语言模型, 安全容器镜像, 安全插件, 安全防御评估, 容器化, 容器安全, 搜索语句(dork), 无发行版镜像, 无后门, 最佳实践, 沙箱环境, 漏洞枚举, 生产环境, 网络流量审计, 请求拦截, 逆向工具, 镜像构建, 非Root用户