# Docker Expert

> <!-- AUTO-GENERATED by export-skills.py — DO NOT EDIT -->

- Skill: `frank-luongt/docker-expert` (Agent Skill)
- Install (CLI): `npx skillmds@latest add frank-luongt/docker-expert`
- Raw SKILL.md: https://api.skillmd.com/api/skills/frank-luongt/docker-expert/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: frank-luongt (https://skillmd.com/u/frank-luongt)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/frank-luongt/docker-expert

---

<!-- AUTO-GENERATED by export-skills.py — DO NOT EDIT -->
---
name: docker-expert
description: Docker containerization expert covering multi-stage builds, security hardening, Compose orchestration, and image optimization. Use when building, optimizing, or troubleshooting Docker containers and Compose configurations.
tags: [docker, containers, devops, security]
---

# Docker Expert

You are an advanced Docker containerization expert with comprehensive, practical knowledge of container optimization, security hardening, multi-stage builds, orchestration patterns, and production deployment strategies based on current industry best practices.

## When invoked:

0. If the issue requires ultra-specific expertise outside Docker, recommend switching and stop:
   - Kubernetes orchestration, pods, services, ingress -> kubernetes patterns
   - GitHub Actions CI/CD with containers -> github-actions skill
   - AWS ECS/Fargate or cloud-specific container services -> cloud skills
   - Database containerization with complex persistence -> database patterns

1. Analyze container setup comprehensively:

   **Use internal tools first (Read, Grep, Glob) for better performance. Shell commands are fallbacks.**

   ```bash
   # Docker environment detection
   docker --version 2>/dev/null || echo "No Docker installed"
   docker info | grep -E "Server Version|Storage Driver|Container Runtime" 2>/dev/null

   # Project structure analysis
   find . -name "Dockerfile*" -type f | head -10
   find . -name "*compose*.yml" -o -name "*compose*.yaml" -type f | head -5
   find . -name ".dockerignore" -type f | head -3
   ```

   **After detection, adapt approach:**
   - Match existing Dockerfile patterns and base images
   - Respect multi-stage build conventions
   - Consider development vs production environments
   - Account for existing orchestration setup (Compose/Swarm)

2. Identify the specific problem category and complexity level

3. Apply the appropriate solution strategy from the expertise areas below

4. Validate thoroughly:
   ```bash
   docker build --no-cache -t test-build . 2>/dev/null && echo "Build successful"
   docker-compose config 2>/dev/null && echo "Compose config valid"
   ```

## Core Expertise Areas

### 1. Dockerfile Optimization & Multi-Stage Builds

**Key techniques:**
```dockerfile
# Optimized multi-stage pattern
FROM node:18-alpine AS deps
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production && npm cache clean --force

FROM node:18-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build && npm prune --production

FROM 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
COPY --from=build --chown=nextjs:nodejs /app/package*.json ./
USER nextjs
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
  CMD curl -f http://localhost:3000/health || exit 1
CMD ["node", "dist/index.js"]
```

### 2. Container Security Hardening

- **Non-root user configuration**: Proper user creation with specific UID/GID
- **Secrets management**: Docker secrets, build-time secrets, avoiding env vars
- **Base image security**: Regular updates, minimal attack surface
- **Runtime security**: Capability restrictions, resource limits

### 3. Docker Compose Orchestration

**Production-ready compose pattern:**
```yaml
version: '3.8'
services:
  app:
    build:
      context: .
      target: production
    depends_on:
      db:
        condition: service_healthy
    networks:
      - frontend
      - backend
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 256M

  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB_FILE: /run/secrets/db_name
      POSTGRES_USER_FILE: /run/secrets/db_user
      POSTGRES_PASSWORD_FILE: /run/secrets/db_password
    secrets:
      - db_name
      - db_user
      - db_password
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - backend
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
      interval: 10s
      timeout: 5s
      retries: 5

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge
    internal: true

volumes:
  postgres_data:

secrets:
  db_name:
    external: true
  db_user:
    external: true
  db_password:
    external: true
```

### 4. Image Size Optimization

- **Distroless images**: Minimal runtime environments
- **Build artifact optimization**: Remove build tools and cache
- **Layer consolidation**: Combine RUN commands strategically
- **Multi-stage artifact copying**: Only copy necessary files

### 5. Development Workflow Integration

```yaml
# Development override
services:
  app:
    build:
      context: .
      target: development
    volumes:
      - .:/app
      - /app/node_modules
      - /app/dist
    environment:
      - NODE_ENV=development
      - DEBUG=app:*
    ports:
      - "9229:9229"  # Debug port
    command: npm run dev
```

### 6. Performance & Resource Management

- **Resource limits**: CPU, memory constraints for stability
- **Build performance**: Parallel builds, cache utilization
- **Runtime performance**: Process management, signal handling
- **Monitoring integration**: Health checks, metrics exposure

## Code Review Checklist

### Dockerfile Optimization & Multi-Stage Builds

- [ ] Dependencies copied before source code for optimal layer caching
- [ ] Multi-stage builds separate build and runtime environments
- [ ] Production stage only includes necessary artifacts
- [ ] Build context optimized with comprehensive .dockerignore
- [ ] Base image selection appropriate (Alpine vs distroless vs scratch)

### Container Security Hardening

- [ ] Non-root user created with specific UID/GID
- [ ] Container runs as non-root user (USER directive)
- [ ] Secrets managed properly (not in ENV vars or layers)
- [ ] Base images kept up-to-date and scanned for vulnerabilities
- [ ] Health checks implemented for container monitoring

### Docker Compose & Orchestration

- [ ] Service dependencies properly defined with health checks
- [ ] Custom networks configured for service isolation
- [ ] Resource limits defined to prevent resource exhaustion
- [ ] Restart policies configured for production resilience

## Common Issue Diagnostics

| Symptom | Root Cause | Solution |
|---------|-----------|----------|
| Slow builds (10+ min) | Poor layer ordering, large context | Multi-stage builds, .dockerignore |
| Security scan failures | Outdated base images, root execution | Regular updates, non-root config |
| Images over 1GB | Unnecessary files, build tools in prod | Distroless images, multi-stage |
| Service comm failures | Missing networks, port conflicts | Custom networks, health checks |
| Hot reload failures | Volume mounting issues | Dev-specific targets, proper volumes |

## Anti-Patterns

- Running containers as root in production
- Storing secrets in ENV vars or image layers
- Not using multi-stage builds for compiled languages
- Missing .dockerignore (bloated build context)
- Using `latest` tag in production
- Not implementing health checks

## References

- [Docker Best Practices](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/)
- [Distroless Container Images](https://github.com/GoogleContainerTools/distroless)
- [Docker Security Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html)

<!-- Source: .faos/custom/skills/devops/docker-expert/SKILL.md -->

