高级Docker容器化专家,具备容器优化、安全加固、多阶段构建、编排模式和生产部署策略的全面实践知识,基于当前行业最佳实践。
下载地址
Skill源码下载地址:agentic-awesome-skills/skills/docker-expert at main · sickn33/agentic-awesome-skills · GitHub
技能概述
docker-expert 技能是一个全面的Docker容器化专家技能,提供容器优化、安全加固、多阶段构建、编排模式和生产部署策略的专业知识。它能够分析现有Docker配置,识别问题,并提供基于最佳实践的解决方案。
主要功能
- Dockerfile优化:层缓存优化、多阶段构建、基础镜像选择
- 安全加固:非root用户配置、密钥管理、运行时安全
- Docker Compose编排:服务依赖、网络配置、环境管理
- 镜像大小优化:Distroless镜像、构建产物优化、层合并
- 开发工作流集成:热重载、调试配置、测试集成
- 性能与资源管理:资源限制、构建性能、监控集成
触发条件
在以下情况下应该调用此技能:
- 需要优化Dockerfile构建性能或镜像大小
- 需要加固容器安全配置
- 需要配置Docker Compose编排
- 需要解决容器网络或部署问题
- 需要设置开发环境容器化工作流
核心专业领域
1. Dockerfile优化与多阶段构建
# 优化的多阶段构建模式
FROM node:18-alpine AS deps
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production && npm cache clean --forceFROM node:18-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build && npm prune --productionFROM node:18-alpine AS runtime
RUN addgroup -g 1001 -S nodejs && adduser -S nextjs -u 1001
WORKDIR /app
COPY --from=deps --chown=nextjs:nodejs /app/node_modules ./node_modules
COPY --from=build --chown=nextjs:nodejs /app/dist ./dist
USER nextjs
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=10s \
CMD curl -f http://localhost:3000/health || exit 1
CMD ["node", "dist/index.js"]
2. 容器安全加固
# 安全加固容器
FROM node:18-alpine
RUN addgroup -g 1001 -S appgroup && \
adduser -S appuser -u 1001 -G appgroup
WORKDIR /app
COPY --chown=appuser:appgroup package*.json ./
RUN npm ci --only=production
COPY --chown=appuser:appgroup . .
USER 1001
3. Docker Compose编排
version: '3.8'
services:
app:
build:
context: .
target: production
depends_on:
db:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
代码审查清单
Dockerfile优化
- 依赖在源代码之前复制以优化层缓存
- 多阶段构建分离构建和运行环境
- 生产阶段仅包含必要的产物
- 使用.dockerignore优化构建上下文
- 基础镜像选择适当(Alpine vs distroless vs scratch)
安全加固
- 创建具有特定UID/GID的非root用户
- 容器以非root用户运行(USER指令)
- 密钥正确管理(不在ENV变量或层中)
- 基础镜像保持最新并扫描漏洞
- 最小攻击面(仅安装必要包)
常见问题诊断
| 问题 | 症状 | 解决方案 |
|---|---|---|
| 构建性能问题 | 慢构建(10+分钟),频繁缓存失效 | 多阶段构建、.dockerignore优化、依赖缓存 |
| 安全漏洞 | 安全扫描失败、暴露密钥、root执行 | 基础镜像更新、密钥管理、非root配置 |
| 镜像大小问题 | 镜像超过1GB、部署缓慢 | Distroless镜像、多阶段优化、产物选择 |
| 网络问题 | 服务通信失败、DNS解析错误 | 自定义网络、健康检查、服务发现 |
高级问题解决模式
跨平台构建
docker buildx create --name multiarch-builder --use
docker buildx build --platform linux/amd64,linux/arm64 \
-t myapp:latest --push .
构建缓存优化
FROM node:18-alpine AS deps
WORKDIR /app
COPY package*.json ./
RUN --mount=type=cache,target=/root/.npm \
npm ci --only=production
密钥管理
FROM alpine
RUN --mount=type=secret,id=api_key \
API_KEY=$(cat /run/secrets/api_key) && \
# 使用API_KEY进行构建过程
最佳实践
- 层缓存优化:将依赖安装与源代码复制分离
- 非root用户:始终创建特定UID/GID的用户
- 健康检查:为生产容器实现健康监控
- 资源限制:设置CPU和内存限制防止资源耗尽
- 密钥管理:使用Docker secrets而非环境变量
- 最小镜像:使用distroless或Alpine基础镜像
转交指南
当问题需要其他专业知识时,推荐转交:
- Kubernetes编排→ kubernetes-expert
- CI/CD管道→ github-actions-expert
- 数据库容器化→ database-expert
- 基础设施自动化→ devops-expert