
Docker Optimization
- 70 installs
- 2 repo stars
- Updated January 5, 2026
- pluginagentmarketplace/custom-plugin-docker
docker-optimization is an agent skill that guides Docker image size, build speed, and runtime tuning for solo-builder deploys.
About
docker-optimization is a containers-focused agent skill that encodes opinionated defaults and checklists for smaller images, faster CI builds, and steadier runtime behavior. Indie SaaS and API builders invoke it when Dockerfile drift has bloated images, layer caches miss constantly, or production containers lack sensible memory caps and health probes. The skill ships structured YAML-style settings (enabled flags, log levels, dev versus production strict validation) plus categorized guidance across image_size, build_speed, and runtime_performance—suitable for agents that emit markdown recommendations or plugin configuration. It is not a full security hardening or Kubernetes manifest generator; it complements those steps by making the container layer cheap to build and reliable to run. Use during late Build when first containerizing, during Ship when tightening CI, and during Operate when revisiting limits after incidents. Pair with your registry and orchestrator docs so limits match your host.
- Image size playbook: alpine/slim bases, multi-stage builds, cache cleanup, combined RUN layers, and .dockerignore
- Build speed: layer ordering by change frequency, BuildKit cache, parallel builds, and build-arg discipline
- Runtime performance: memory limits, CPU shares, tmpfs for temp I/O, health checks, and restart policies
- Markdown-oriented output format with optional strict validation in production environments
- Integrations toggles for git, linter, and formatter in generated plugin-style config
Docker Optimization by the numbers
- 70 all-time installs (skills.sh)
- +1 installs in the week ending Jul 26, 2026 (Skillselion tracking)
- Ranked #620 of 1,453 DevOps & CI/CD skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Jul 26, 2026 (Skillselion catalog sync)
npx skills add https://github.com/pluginagentmarketplace/custom-plugin-docker --skill docker-optimizationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 70 |
|---|---|
| repo stars | ★ 2 |
| Security audit | 3 / 3 scanners passed |
| Last updated | January 5, 2026 |
| Repository | pluginagentmarketplace/custom-plugin-docker ↗ |
What it does
Shrink Docker images, speed up builds, and tune container runtime limits before you ship services to production.
Who is it for?
Best when you're shipping containerized APIs or workers and want fast, repeatable image builds without hiring a platform team.
Skip if: Bare-metal deploys with no Docker, or teams needing full SOC2 container compliance narratives in one skill.
When should I use this skill?
User asks to optimize Docker images, speed up container builds, or improve runtime performance of Dockerized services.
What you get
You get a structured optimization checklist and config defaults—multi-stage patterns, BuildKit habits, and runtime policies—ready to paste into Dockerfiles and compose files.
- Markdown optimization report with categorized recommendations
- Optional docker-optimization YAML-style configuration for plugin workflows
By the numbers
- Three optimization pillars: image_size, build_speed, runtime_performance
- Environment profiles: development and production with distinct log_level and strict_mode validation
Files
Docker Optimization Skill
Comprehensive optimization techniques for Docker images and containers covering size reduction, build caching, and runtime performance.
Purpose
Reduce image size, improve build times, and optimize container performance using 2024-2025 industry best practices.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| target | enum | No | all | size/build/runtime/all |
| base_image | string | No | - | Current base image |
| current_size | string | No | - | Current image size |
Optimization Strategies
1. Image Size Reduction
Base Image Selection
| Base | Size | Use Case |
|---|---|---|
| scratch | 0 | Static Go/Rust binaries |
| distroless | 2-20MB | Production containers |
| alpine | 5MB | General purpose |
| slim | 80-150MB | When apt packages needed |
| full | 500MB+ | Development only |
# Before: 1.2GB
FROM node:20
# After: 150MB (88% smaller)
FROM node:20-alpineLayer Optimization
# 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/*Remove Unnecessary Files
# 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. Build Speed Optimization
Layer Caching Strategy
# Dependencies first (rarely change)
COPY package*.json ./
RUN npm ci
# Source code last (frequently changes)
COPY . .
RUN npm run buildBuildKit Cache Mounts
# 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.txtParallel Multi-Stage
# 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 lint3. Runtime Performance
Resource Limits
services:
app:
deploy:
resources:
limits:
cpus: '1'
memory: 512M
reservations:
cpus: '0.5'
memory: 256MContainer Tuning
# 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 appOptimization Checklist
Size Checklist
- [ ] Using smallest viable base image?
- [ ] Multi-stage build implemented?
- [ ] Package manager cache cleaned?
- [ ] Dev dependencies excluded?
- [ ] .dockerignore configured?
Build Speed Checklist
- [ ] Dependencies copied before code?
- [ ] BuildKit enabled?
- [ ] Cache mounts used?
- [ ] Parallel stages where possible?
Runtime Checklist
- [ ] Resource limits set?
- [ ] Health checks configured?
- [ ] Non-root user?
- [ ] Read-only filesystem where possible?
Analysis Tools
# 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 .Error Handling
Common Issues
| Issue | Cause | Solution |
|---|---|---|
| Large image | No multi-stage | Implement multi-stage |
| Slow builds | Poor layer order | Dependencies before code |
| Cache not working | Context changes | Use .dockerignore |
| OOM at runtime | No limits | Set memory limits |
Troubleshooting
Debug Checklist
- [ ] BuildKit enabled? (
DOCKER_BUILDKIT=1) - [ ] Cache being used? (Check build output)
- [ ] .dockerignore working? (Check context size)
- [ ] Layers optimized? (Run
dive)
Usage
Skill("docker-optimization")Related Skills
- docker-multi-stage
- dockerfile-basics
- docker-production
# docker-optimization Configuration
# Category: containers
# Generated: 2025-12-30
skill:
name: docker-optimization
version: "1.0.0"
category: containers
settings:
# Default settings for docker-optimization
enabled: true
log_level: info
# Category-specific defaults
validation:
strict_mode: false
auto_fix: false
output:
format: markdown
include_examples: true
# Environment-specific overrides
environments:
development:
log_level: debug
validation:
strict_mode: false
production:
log_level: warn
validation:
strict_mode: true
# Integration settings
integrations:
# Enable/disable integrations
git: true
linter: true
formatter: true
# Docker Optimization Guide
image_size:
- Use alpine/slim base images
- Multi-stage builds
- Remove package caches
- Combine RUN commands
- Use .dockerignore
build_speed:
- Order Dockerfile by change frequency
- Use BuildKit cache
- Parallelize builds
- Use build arguments wisely
runtime_performance:
- Set memory limits
- Configure CPU shares
- Use tmpfs for temp files
- Optimize health checks
- Use restart policies
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "docker-optimization Configuration Schema",
"type": "object",
"properties": {
"skill": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"version": {
"type": "string",
"pattern": "^\\d+\\.\\d+\\.\\d+$"
},
"category": {
"type": "string",
"enum": [
"api",
"testing",
"devops",
"security",
"database",
"frontend",
"algorithms",
"machine-learning",
"cloud",
"containers",
"general"
]
}
},
"required": [
"name",
"version"
]
},
"settings": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean",
"default": true
},
"log_level": {
"type": "string",
"enum": [
"debug",
"info",
"warn",
"error"
]
}
}
}
},
"required": [
"skill"
]
}Docker Optimization Guide
Overview
This guide provides comprehensive documentation for the docker-optimization skill in the custom-plugin-docker plugin.
Category: Containers
Quick Start
Prerequisites
- Familiarity with containers concepts
- Development environment set up
- Plugin installed and configured
Basic Usage
# Invoke the skill
claude "docker-optimization - [your task description]"
# Example
claude "docker-optimization - analyze the current implementation"Core Concepts
Key Principles
1. Consistency - Follow established patterns 2. Clarity - Write readable, maintainable code 3. Quality - Validate before deployment
Best Practices
- Always validate input data
- Handle edge cases explicitly
- Document your decisions
- Write tests for critical paths
Common Tasks
Task 1: Basic Implementation
# Example implementation pattern
def implement_docker_optimization(input_data):
"""
Implement docker-optimization functionality.
Args:
input_data: Input to process
Returns:
Processed result
"""
# Validate input
if not input_data:
raise ValueError("Input required")
# Process
result = process(input_data)
# Return
return resultTask 2: Advanced Usage
For advanced scenarios, consider:
- Configuration customization via
assets/config.yaml - Validation using
scripts/validate.py - Integration with other skills
Troubleshooting
Common Issues
| Issue | Cause | Solution |
|---|---|---|
| Skill not found | Not installed | Run plugin sync |
| Validation fails | Invalid config | Check config.yaml |
| Unexpected output | Missing context | Provide more details |
Related Resources
- SKILL.md - Skill specification
- config.yaml - Configuration options
- validate.py - Validation script
---
Last updated: 2025-12-30
Docker Optimization Patterns
Design Patterns
Pattern 1: Input Validation
Always validate input before processing:
def validate_input(data):
if data is None:
raise ValueError("Data cannot be None")
if not isinstance(data, dict):
raise TypeError("Data must be a dictionary")
return TruePattern 2: Error Handling
Use consistent error handling:
try:
result = risky_operation()
except SpecificError as e:
logger.error(f"Operation failed: {e}")
handle_error(e)
except Exception as e:
logger.exception("Unexpected error")
raisePattern 3: Configuration Loading
Load and validate configuration:
import yaml
def load_config(config_path):
with open(config_path) as f:
config = yaml.safe_load(f)
validate_config(config)
return configAnti-Patterns to Avoid
❌ Don't: Swallow Exceptions
# BAD
try:
do_something()
except:
pass✅ Do: Handle Explicitly
# GOOD
try:
do_something()
except SpecificError as e:
logger.warning(f"Expected error: {e}")
return default_valueCategory-Specific Patterns: Containers
Recommended Approach
1. Start with the simplest implementation 2. Add complexity only when needed 3. Test each addition 4. Document decisions
Common Integration Points
- Configuration:
assets/config.yaml - Validation:
scripts/validate.py - Documentation:
references/GUIDE.md
---
Pattern library for docker-optimization skill
#!/usr/bin/env python3
"""
Validation script for docker-optimization skill.
Category: containers
"""
import os
import sys
import yaml
import json
from pathlib import Path
def validate_config(config_path: str) -> dict:
"""
Validate skill configuration file.
Args:
config_path: Path to config.yaml
Returns:
dict: Validation result with 'valid' and 'errors' keys
"""
errors = []
if not os.path.exists(config_path):
return {"valid": False, "errors": ["Config file not found"]}
try:
with open(config_path, 'r') as f:
config = yaml.safe_load(f)
except yaml.YAMLError as e:
return {"valid": False, "errors": [f"YAML parse error: {e}"]}
# Validate required fields
if 'skill' not in config:
errors.append("Missing 'skill' section")
else:
if 'name' not in config['skill']:
errors.append("Missing skill.name")
if 'version' not in config['skill']:
errors.append("Missing skill.version")
# Validate settings
if 'settings' in config:
settings = config['settings']
if 'log_level' in settings:
valid_levels = ['debug', 'info', 'warn', 'error']
if settings['log_level'] not in valid_levels:
errors.append(f"Invalid log_level: {settings['log_level']}")
return {
"valid": len(errors) == 0,
"errors": errors,
"config": config if not errors else None
}
def validate_skill_structure(skill_path: str) -> dict:
"""
Validate skill directory structure.
Args:
skill_path: Path to skill directory
Returns:
dict: Structure validation result
"""
required_dirs = ['assets', 'scripts', 'references']
required_files = ['SKILL.md']
errors = []
# Check required files
for file in required_files:
if not os.path.exists(os.path.join(skill_path, file)):
errors.append(f"Missing required file: {file}")
# Check required directories
for dir in required_dirs:
dir_path = os.path.join(skill_path, dir)
if not os.path.isdir(dir_path):
errors.append(f"Missing required directory: {dir}/")
else:
# Check for real content (not just .gitkeep)
files = [f for f in os.listdir(dir_path) if f != '.gitkeep']
if not files:
errors.append(f"Directory {dir}/ has no real content")
return {
"valid": len(errors) == 0,
"errors": errors,
"skill_name": os.path.basename(skill_path)
}
def main():
"""Main validation entry point."""
skill_path = Path(__file__).parent.parent
print(f"Validating docker-optimization skill...")
print(f"Path: {skill_path}")
# Validate structure
structure_result = validate_skill_structure(str(skill_path))
print(f"\nStructure validation: {'PASS' if structure_result['valid'] else 'FAIL'}")
if structure_result['errors']:
for error in structure_result['errors']:
print(f" - {error}")
# Validate config
config_path = skill_path / 'assets' / 'config.yaml'
if config_path.exists():
config_result = validate_config(str(config_path))
print(f"\nConfig validation: {'PASS' if config_result['valid'] else 'FAIL'}")
if config_result['errors']:
for error in config_result['errors']:
print(f" - {error}")
else:
print("\nConfig validation: SKIPPED (no config.yaml)")
# Summary
all_valid = structure_result['valid']
print(f"\n==================================================")
print(f"Overall: {'VALID' if all_valid else 'INVALID'}")
return 0 if all_valid else 1
if __name__ == "__main__":
sys.exit(main())
Related skills
How it compares
Structured optimization checklist for Dockerfiles and runtime flags—not a substitute for full Kubernetes or cloud-specific landing-zone skills.
FAQ
Who is docker-optimization for?
Developers containerizing SaaS, APIs, or CLIs who want their agent to apply proven Docker size and CI cache patterns instead of one-off chat advice.
When should I use docker-optimization?
While Build backend work defines the first Dockerfile, during Ship launch prep before registry push, and in Operate infra when tuning memory and health checks after traffic grows.
Is docker-optimization safe to install?
It recommends standard Docker practices; confirm changes in staging and read the Security Audits panel on this Prism page before enabling auto-fix style options in production.