Awesome-claude-code optimize-docker-compose-resources

Optimizes Docker Compose resource allocation for PHP stacks. Configures memory limits, CPU constraints, and service scaling.

install
source · Clone the upstream repo
git clone https://github.com/dykyi-roman/awesome-claude-code
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/dykyi-roman/awesome-claude-code "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/optimize-docker-compose-resources" ~/.claude/skills/dykyi-roman-awesome-claude-code-optimize-docker-compose-resources && rm -rf "$T"
manifest: skills/optimize-docker-compose-resources/SKILL.md
source content

Docker Compose Resource Optimization

Configures resource allocation, constraints, and scaling for PHP application stacks.

Resource Allocation Overview

┌─────────────────────────────────────────────────────────────────┐
│            PHP STACK RESOURCE DISTRIBUTION (4GB Host)            │
├─────────────────────────────────────────────────────────────────┤
│  PHP-FPM:   ████████████████████░░░░░░░░░░  1024MB  (25%)     │
│  MySQL:     ████████████████████████░░░░░░  1536MB  (38%)     │
│  Redis:     ████████░░░░░░░░░░░░░░░░░░░░░░   512MB  (13%)    │
│  Nginx:     ████░░░░░░░░░░░░░░░░░░░░░░░░░░   256MB   (6%)    │
│  RabbitMQ:  ████████░░░░░░░░░░░░░░░░░░░░░░   512MB  (13%)    │
│  System:    ████░░░░░░░░░░░░░░░░░░░░░░░░░░   256MB   (6%)    │
└─────────────────────────────────────────────────────────────────┘

Recommended Resource Limits

ServiceMemory LimitMemory ReservationCPU LimitCPU Reservation
PHP-FPM512MB-1GB256MB1.00.25
Nginx128MB-256MB64MB0.50.1
MySQL1GB-2GB512MB1.50.5
PostgreSQL1GB-2GB512MB1.50.5
Redis256MB-512MB128MB0.50.1
RabbitMQ512MB-1GB256MB1.00.25

Service Configurations

PHP-FPM

  php-fpm:
    deploy:
      resources:
        limits: { cpus: "1.0", memory: 1024M }
        reservations: { cpus: "0.25", memory: 256M }
      replicas: 2
    tmpfs: ["/tmp:size=64M"]
    healthcheck:
      test: ["CMD", "php-fpm-healthcheck"]
      interval: 30s
      timeout: 5s
      start_period: 10s

MySQL

  mysql:
    deploy:
      resources:
        limits: { cpus: "1.5", memory: 2048M }
        reservations: { cpus: "0.5", memory: 512M }
    shm_size: "256m"
    command: >
      --innodb-buffer-pool-size=1G --innodb-log-file-size=256M
      --max-connections=200 --tmp-table-size=64M
    ulimits:
      nofile: { soft: 65536, hard: 65536 }

Redis

  redis:
    deploy:
      resources:
        limits: { cpus: "0.5", memory: 512M }
        reservations: { cpus: "0.1", memory: 128M }
    command: redis-server --maxmemory 384mb --maxmemory-policy allkeys-lru --save "" --appendonly no
    tmpfs: ["/data:size=384M"]

RabbitMQ

  rabbitmq:
    deploy:
      resources:
        limits: { cpus: "1.0", memory: 1024M }
        reservations: { cpus: "0.25", memory: 256M }
    environment:
      RABBITMQ_VM_MEMORY_HIGH_WATERMARK: 0.6
      RABBITMQ_DISK_FREE_LIMIT: 128MB

Logging Configuration

    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
Servicemax-sizemax-fileTotal Disk
PHP-FPM10m330MB
Nginx20m5100MB
MySQL10m330MB
Redis5m210MB

tmpfs for Ephemeral Data

    tmpfs:
      - /tmp:size=64M,mode=1777
      - /app/var/cache:size=128M
      - /app/var/log:size=32M

Benefits: faster I/O, no disk writes, auto-cleaned on restart.

shm_size for Databases

  postgres:
    shm_size: "256m"   # shared_buffers, WAL buffers, lock tables
  mysql:
    shm_size: "256m"   # InnoDB buffer pool, temp tables

ulimits Configuration

ulimitDefaultRecommendedPurpose
nofile102465536Max open files/sockets
nproc10244096Max processes
memlock64KBunlimitedMemory locking (Redis)

Scaling with Replicas

  php-fpm:
    deploy:
      replicas: 3
      endpoint_mode: dnsrr
      resources:
        limits: { cpus: "0.5", memory: 512M }
    # Total: 1.5 CPU, 1536M memory across 3 replicas
    # Nginx resolves php-fpm to all replicas via DNS round-robin

Before/After Comparison

MetricNo LimitsWith LimitsImprovement
OOM killsFrequentRarePredictable
Noisy neighborCommonPreventedIsolated
Memory waste30-50%< 10%-80% waste
Log disk usageUnbounded< 200MBControlled
Recovery timeMinutesSecondsFaster restarts

Generation Instructions

  1. Inventory services: List all containers in the stack
  2. Assess host resources: Total CPU and memory available
  3. Allocate proportionally: Database > App > Cache > Proxy
  4. Set limits and reservations: Limits cap usage, reservations guarantee minimum
  5. Configure logging: Prevent unbounded disk growth
  6. Add health checks: Enable automatic recovery
  7. Test under load: Verify no OOM kills or throttling