# 📋 Docker Compose - Limitation CPU & RAM ## 📌 **Méthodes Principales** ### **1. Pour usage local (standalone)** ```yaml services: mon-service: image: mon-image:latest # RAM mem_limit: 512M # Maximum mem_reservation: 256M # Minimum garanti memswap_limit: 1G # RAM + swap # CPU cpus: '0.5' # 50% d'un cœur ``` ### **2. Pour Docker Swarm** ```yaml services: mon-service: image: mon-image:latest deploy: resources: limits: cpus: '0.5' memory: 512M reservations: cpus: '0.25' memory: 256M ``` --- ## ⚙️ **Options détaillées** ### **Mémoire (RAM)** | Option | Description | Exemple | |--------|-------------|---------| | `mem_limit` | Limite maximale de RAM | `512M`, `2G` | | `mem_reservation` | Minimum garanti | `256M`, `1G` | | `memswap_limit` | RAM + swap totale | `1G`, `-1` (désactive swap) | ### **CPU** | Option | Description | Exemple | |--------|-------------|---------| | `cpus` | Nombre/part de CPU | `'1.5'`, `'0.5'` | | `cpu_period` + `cpu_quota` | Contrôle fin | `period: 100000`, `quota: 50000` (50%) | | `cpuset` | Affinité CPU | `'0-1'`, `'0,2'` | | `cpu_shares` | Poids relatif | `512` (50% poids normal) | --- ## 💡 **Exemple Complet** ```yaml version: '3.8' services: app: image: nginx:alpine container_name: mon-app # RAM mem_limit: 1G mem_reservation: 512M memswap_limit: 1.5G # CPU cpus: '0.75' cpu_shares: 768 cpu_period: 100000 cpu_quota: 75000 # Optimisations restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost"] interval: 30s timeout: 10s retries: 3 ``` --- ## 🔧 **Formules Utiles** ### **Calcul CPU Quota** ``` CPU % = (cpu_quota / cpu_period) * 100 ``` Exemple : `quota: 50000` ÷ `period: 100000` = **50% CPU** ### **Unités de mémoire** - `B` = bytes - `K` = kilobytes (1000 bytes) - `M` = megabytes - `G` = gigabytes --- ## 🛠️ **Commandes de vérification** ```bash # Voir l'utilisation en temps réel docker stats # Voir les limites d'un conteneur docker inspect | grep -i "memory\|cpu" # Tester les limites docker run --rm -it --cpus="0.5" --memory="512m" alpine:latest ``` --- ## ⚠️ **Bonnes pratiques** 1. **Toujours définir des limites** pour éviter la surconsommation 2. **Reservation < Limit** pour éviter les conflits 3. **Adapter au hardware** : ne pas allouer plus que la machine n'a 4. **Surveiller l'utilisation** avec `docker stats` 5. **Penser au swap** : `memswap_limit` contrôle RAM + swap totale --- ## 🎯 **Récapitulatif rapide** | Besoin | Configuration | |--------|--------------| | **Limiter à 50% CPU** | `cpus: '0.5'` | | **Max 1GB RAM** | `mem_limit: 1G` | | **Garantir 256MB** | `mem_reservation: 256M` | | **Désactiver swap** | `memswap_limit: -1` | | **2 cœurs max** | `cpuset: '0-1'` | --- ## 📚 **Ressources** - [Documentation officielle Docker](https://docs.docker.com/compose/compose-file/compose-file-v3/#resources) - [Best practices - Resource limits](https://docs.docker.com/config/containers/resource_constraints/) - [Calculateur CPU quota](https://docs.docker.com/config/containers/resource_constraints/#cpu) --- **📝 À copier/coller dans votre fichier `docker-compose.yml`**