关于 docker-optimization
面向开发者的 Docker 镜像与容器优化技能,聚焦体积、构建速度和运行性能,并提供基础镜像、缓存、多阶段构建及资源限制的策略、清单和分析命令。
主要功能
- 01基础镜像选择
- 02层与缓存优化
- 03多阶段构建指导
- 04运行时资源限制
- 05镜像与层分析命令
适用场景
- 01缩减容器镜像体积
- 02提升 Docker 构建速度
- 03设置容器 CPU 和内存限制
- 04排查镜像层与缓存问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pluginagentmarketplace/ custom-plugin-docker --skill docker-optimization安装后在 Claude Code 中输入/docker-optimization确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/config.yamloptimization-tips.yamlschema.jsonreferences/GUIDE.mdPATTERNS.mdscripts/validate.py详细介绍
Docker 优化技能
涵盖 Docker 镜像和容器的全面优化技巧,包括缩减体积、构建缓存和运行时性能。
用途
使用 2024-2025 年的行业最佳实践,缩减镜像体积、缩短构建时间并优化容器性能。
参数
| 参数 | 类型 | 必需 | 默认值 | 描述 |
|---|---|---|---|---|
| target | enum | 否 | all | size/build/runtime/all |
| base_image | string | 否 | - | 当前基础镜像 |
| current_size | string | 否 | - | 当前镜像体积 |
优化策略
1. 缩减镜像体积
选择基础镜像
| 基础镜像 | 体积 | 使用场景 |
|---|---|---|
| scratch | 0 | 静态 Go/Rust 二进制文件 |
| distroless | 2-20MB | 生产容器 |
| alpine | 5MB | 通用场景 |
| slim | 80-150MB | 需要 apt 软件包时 |
| full | 500MB+ | 仅用于开发 |
# Before: 1.2GB
FROM node:20
# After: 150MB (88% smaller)
FROM node:20-alpine
优化层
# Bad: 3 layers, 150MB
RUN apt-get update
RUN apt-get install -y curl
RUN rm -rf /var/lib/apt/lists/*
# Good: 1 layer, 50MB
RUN apt-get update && \
apt-get install -y --no-install-recommends curl && \
rm -rf /var/lib/apt/lists/*
移除不必要的文件
# Clean package manager cache
RUN npm cache clean --force
RUN pip cache purge
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Use .dockerignore
# node_modules, .git, *.md, tests/, docs/
2. 优化构建速度
层缓存策略
# Dependencies first (rarely change)
COPY package*.json ./
RUN npm ci
# Source code last (frequently changes)
COPY . .
RUN npm run build
BuildKit 缓存挂载
# syntax=docker/dockerfile:1
FROM node:20-alpine
# Cache npm packages
RUN --mount=type=cache,target=/root/.npm \
npm ci
# Cache pip packages
RUN --mount=type=cache,target=/root/.cache/pip \
pip install -r requirements.txt
并行多阶段构建
# Parallel stages (BuildKit)
FROM node:20-alpine AS deps
COPY package*.json ./
RUN npm ci
FROM deps AS builder
COPY . .
RUN npm run build
FROM deps AS linter
COPY . .
RUN npm run lint
3. 运行时性能
资源限制
services:
app:
deploy:
resources:
limits:
cpus: '1'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
容器调优
# Set memory limits
docker run --memory=512m --memory-swap=512m app
# CPU limits
docker run --cpus=1.5 app
# I/O limits
docker run --device-read-bps=/dev/sda:1mb app
优化检查清单
体积检查清单
- 是否使用了满足需求的最小基础镜像?
- 是否实现了多阶段构建?
- 是否清理了软件包管理器缓存?
- 是否排除了开发依赖?
- 是否配置了 .dockerignore?
构建速度检查清单
- 是否在复制代码前先复制依赖项?
- 是否启用了 BuildKit?
- 是否使用了缓存挂载?
- 是否在可能的情况下并行执行各阶段?
运行时检查清单
- 是否设置了资源限制?
- 是否配置了健康检查?
- 是否使用了非 root 用户?
- 是否在可能的情况下使用了只读文件系统?
分析工具
# Image size analysis
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
# Layer analysis
docker history <image> --format "{{.Size}}\t{{.CreatedBy}}"
# Deep dive analysis
dive <image>
# Build time analysis
DOCKER_BUILDKIT=1 docker build --progress=plain .
错误处理
常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 镜像体积过大 | 未使用多阶段构建 | 实施多阶段构建 |
| 构建缓慢 | 层顺序不佳 | 先处理依赖项,再处理代码 |
| 缓存未生效 | 构建上下文发生变化 | 使用 .dockerignore |
| 运行时内存不足 | 未设置限制 | 设置内存限制 |
故障排除
调试检查清单
- 是否启用了 BuildKit?(
DOCKER_BUILDKIT=1) - 是否使用了缓存?(检查构建输出)
- .dockerignore 是否生效?(检查上下文大小)
- 层是否经过优化?(运行
dive)
用法
Skill("docker-optimization")
相关技能
- docker-multi-stage
- dockerfile-basics
- docker-production
评论
支持 Markdown