mcpField
D
docker

docker

github.com/panaversity云与 DevOps49 次安装
代码仓库

关于 docker

docker 是面向项目容器化的技能,会检测运行环境并生成适配项目的 Docker 配置。它侧重安全默认值、资源适配,以及构建和健康检查验证。

主要功能

  1. 01检测运行时与项目结构
  2. 02按资源情况调整配置
  3. 03生成多阶段 Dockerfile
  4. 04创建带安全默认值的 compose.yaml
  5. 05验证构建与健康检查
  6. 06检查镜像中的敏感信息

适用场景

  1. 01为 Python 或 Node.js 项目配置容器
  2. 02按 Docker 可用内存设置资源限制
  3. 03为开发和生产生成构建目标
  4. 04检查容器配置中的安全风险

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/panaversity/agentfactory --skill docker

安装后在 Claude Code 中输入/docker确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

Makefile
references/
docker-hardened-images.md
env-analysis.md
multi-stage-builds.md
production-checklist.md
references/node/
nextjs.md
package-managers.md
references/python/
django.md
fastapi.md
flask.md
native-deps.md
templates/node/
Dockerfile
compose.yaml
dockerignore
templates/python/
Dockerfile
compose.yaml
dockerignore

详细介绍

Docker

采用安全优先默认设置的生产级 Docker 容器化方案。


资源检测与适配

生成 Dockerfile/Compose 前,检测环境:

# Detect host machine memory
sysctl -n hw.memsize 2>/dev/null | awk '{print $0/1024/1024/1024 " GB"}' || \
  grep MemTotal /proc/meminfo | awk '{print $2/1024/1024 " GB"}'

# Detect Docker allocated resources
docker info --format 'Memory: {{.MemTotal}}, CPUs: {{.NCPU}}'

# Detect available disk space
docker system df

根据检测结果调整配置:

检测到的 Docker 内存配置档构建内存容器限制
< 4GB受限1GB256Mi
4-8GB最小2GB512Mi
8-12GB标准4GB1Gi
> 12GB扩展8GB2Gi
Agent 行为
  1. 检测生成 compose.yaml 前的 Docker 资源
  2. 调整资源限制,使其适应可用内存
  3. 警告资源不足可能导致构建失败
  4. 计算安全限制:docker_memory * 0.6 / container_count
自适应 Compose 模板

受限(Docker 内存 < 4GB):

services:
  app:
    deploy:
      resources:
        limits:
          memory: 256M
          cpus: '0.25'
    build:
      args:
        - BUILDKIT_STEP_LOG_MAX_SIZE=10000000

⚠️ Agent 应警告:“Docker 内存不足。多阶段构建可能失败。”

标准(Docker 内存为 4-8GB):

services:
  app:
    deploy:
      resources:
        limits:
          memory: 512M
          cpus: '0.5'
        reservations:
          memory: 256M

扩展(Docker 内存 > 8GB):

services:
  app:
    deploy:
      resources:
        limits:
          memory: 1G
          cpus: '1.0'
        reservations:
          memory: 512M
构建前验证

运行 docker build 前,Agent 应验证:

# Check available memory
docker info --format '{{.MemTotal}}' | awk '{if ($1 < 4000000000) print "WARNING: Low memory"}'

如果资源受限:使用 --memory 标志,并提醒用户构建可能失败。


此技能的功能

分析与检测:

  • 自动检测运行时、框架、版本和入口点(无需提问)
  • 扫描 .env 文件,将内容分类为机密、构建参数或运行时配置
  • 检测原生依赖项,生成正确的构建依赖项
  • 识别缺失的配置(Next.js standalone、健康检查端点)

生成:

  • 根据你的项目结构创建定制的多阶段 Dockerfile
  • 生成采用安全默认设置(非 root、只读、资源限制)的 compose.yaml
  • 缺少健康检查端点时添加
  • 修复配置问题(例如,为 Next.js 添加 output: 'standalone')

验证:

  • 交付前构建开发和生产目标
  • 验证健康检查端点是否正常工作
  • 确认生产环境使用非 root 用户
  • 警告可能泄露到镜像中的机密
  • 报告镜像大小

安全:

  • 绝不将机密写入镜像
  • 默认使用非 root 用户
  • 尽量缩小攻击面(多阶段构建)
  • 固定版本(不使用 :latest)
  • 包含安全扫描命令

此技能不包含的功能

  • 生成 Kubernetes 清单(请使用专用的 k8s 技能)
  • 创建 Helm 图表(请使用专用的 helm 技能)
  • 处理 Bun/Deno(请使用专用技能)
  • 不经定制而盲目复制模板

实施前

收集上下文,确保成功实施:

来源收集内容
代码库包文件、现有 Dockerfile、.env 模式
对话开发或生产目标、基础镜像偏好
技能参考框架模式、多阶段构建、安全性
用户指南镜像仓库惯例、命名标准

需要澄清的信息

无法自动检测时进行询问:

问题何时询问
目标环境“要为开发环境还是生产环境构建?”
基础镜像偏好“使用标准精简镜像还是企业加固镜像?”
现有 Docker 文件“增强现有 Dockerfile,还是新建一个?”
目标镜像仓库“仅用于本地,还是要推送到镜像仓库?”

检测运行时

存在的文件运行时包管理器
requirements.txt、pyproject.toml、uv.lockPythonpip/uv
pnpm-lock.yamlNode.jspnpm
yarn.lockNode.jsyarn
package-lock.jsonNode.jsnpm

自动检测(不要提问——从文件中检测)

Python
内容检测依据
Python 版本pyproject.toml (requires-python)、.python-version、runtime.txt
框架代码中的导入(from fastapi、from flask、import django)
包管理器uv.lock → uv、poetry.lock → poetry,否则使用 pip
原生依赖扫描依赖项:psycopg2、cryptography、numpy、pillow
应用入口点查找 app = FastAPI()、app = Flask() 或 manage.py
Node.js
内容检测依据
Node 版本.nvmrc、.node-version、package.json (engines.node)
框架package.json 中的依赖项(next、express、@nestjs/core)
包管理器pnpm-lock.yaml → pnpm、yarn.lock → yarn,否则使用 npm
输出类型Next.js:检查 next.config.js 中的 output: 'standalone'
自动修复问题
问题操作
Next.js 缺少 output: 'standalone'在 next.config.js 中添加该配置
未找到健康检查端点创建 /health/live 和 /health/ready
使用 uv 但没有 uv.lock先运行 uv lock
有 pyproject.toml 但没有构建系统使用 uv pip install -r pyproject.toml

工作流

1. SCAN PROJECT
   - Detect runtime, framework, version, entrypoint
   - Find dependency files, native deps
   - Locate existing Docker files (don't blindly overwrite)
         ↓
2. ANALYZE ENVIRONMENT
   - Scan all .env* files
   - Classify: SECRET (never bake) / BUILD_ARG / RUNTIME
   - Flag security issues
         ↓
3. FIX CONFIGURATION
   - Add Next.js `output: 'standalone'` if missing
   - Create health endpoints if missing
   - Generate .env.example with safe placeholders
         ↓
4. GENERATE FILES
   - Dockerfile (customized CMD, paths, build deps)
   - .dockerignore (excludes .env, secrets)
   - compose.yaml (with security defaults)
         ↓
5. VALIDATE & TEST
   - docker build --target dev -t app:dev .
   - docker build --target production -t app:prod .
   - Test health endpoints
   - Verify non-root user
   - Report image size
         ↓
6. DELIVER WITH CONTEXT
   - All files with explanations
   - Security scan command
   - Any warnings about secrets
   - Rollback instructions if replacing existing

仅在确实存在歧义时提问(例如,单体仓库中有多个应用、配置相互冲突)


基础镜像决策矩阵

选项适用场景权衡
Slim {runtime}:X-slim通用生产环境(默认)适用范围广,无需身份验证
DHI dhi.io/{runtime}:XSOC2/HIPAA、企业级场景需要执行 docker login dhi.io
Alpine {runtime}:X-alpine追求最小体积原生依赖可能存在 musl 问题

默认:Slim(适用范围广,无需身份验证)


阶段结构

deps/base  → Install dependencies (cached layer)
    ↓
builder    → Build/compile application
    ↓
dev        → Hot-reload, volume mounts (--target dev)
    ↓
production → Minimal DHI runtime (--target production)
构建命令
docker build --target dev -t myapp:dev .
docker build --target production -t myapp:prod .

Python 模式

框架 CMD
框架开发环境生产环境
FastAPIuvicorn app.main:app --reloaduvicorn app.main:app --workers 4
Flaskflask run --debuggunicorn -w 4 app:app
Djangopython manage.py runservergunicorn -w 4 project.wsgi
缓存挂载(uv/pip)
RUN --mount=type=cache,target=/root/.cache/uv \
    --mount=type=cache,target=/root/.cache/pip \
    uv pip install -r requirements.txt
优雅关闭(FastAPI)
@asynccontextmanager
async def lifespan(app: FastAPI):
    yield  # startup
    # shutdown logic here

Node.js 模式

框架构建
框架构建输出
Next.jsnext build.next/standalone
Expresstscdist/
NestJSnest builddist/
缓存挂载
# pnpm
RUN --mount=type=cache,target=/root/.local/share/pnpm/store \
    pnpm install --frozen-lockfile

# npm
RUN --mount=type=cache,target=/root/.npm npm ci

# yarn
RUN --mount=type=cache,target=/usr/local/share/.cache/yarn \
    yarn install --frozen-lockfile
优雅关闭(Node.js)
process.on('SIGTERM', () => {
  server.close(() => process.exit(0));
});

安全检查清单

交付前,请验证:

  • 生产阶段使用非 root 用户 USER
  • Dockerfile 或镜像层中不包含密钥
  • .dockerignore 排除 .env、.git 和密钥
  • 多阶段构建将构建工具与运行环境分开
  • 使用 DHI 或加固后的基础镜像
  • 已定义 HEALTHCHECK 指令
  • 生产阶段不安装软件包
  • 通过运行时环境变量或挂载文件提供密钥

输出文件

文件用途
Dockerfile多阶段、多目标构建
.dockerignore排除敏感或不必要的文件
compose.yaml本地开发环境堆栈
health.py / 健康检查端点框架专用的健康检查

参考文件

始终先阅读
文件用途
references/env-analysis.md关键:密钥检测、.env 分类
references/production-checklist.md关键:交付前验证
特定框架
文件阅读时机
references/python/fastapi.mdFastAPI:uvicorn、lifespan
references/python/flask.mdFlask:gunicorn、蓝图
references/python/django.mdDjango:gunicorn、中间件
references/python/native-deps.md检测 psycopg2、cryptography 等
references/node/nextjs.mdNext.js:standalone、ISR
references/node/package-managers.mdnpm/yarn/pnpm 缓存
可选
文件阅读时机
references/docker-hardened-images.md用户需要企业级安全(DHI)时
references/multi-stage-builds.md复杂的构建模式

模板(参考模式)

templates/ 中的模板是参考模式,不是可直接复制粘贴的文件。

Agent 必须:

  1. 阅读模板以了解结构
  2. 根据实际项目自定义路径、CMD 和构建阶段
  3. 生成入口点正确的 Dockerfile(例如,src.app.main:app)
  4. 绝不输出类似“# Replace based on framework”的占位注释

自定义示例:

# Template says:
CMD ["uvicorn", "app.main:app", ...]

# Agent detects app at src/api/main.py, generates:
CMD ["uvicorn", "src.api.main:app", ...]

评论

支持 Markdown