Docker aide limit cpu Ram compose.md
· 3.3 KiB · Markdown
Исходник
# 📋 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 <container_id> | 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`**
📋 Docker Compose - Limitation CPU & RAM
📌 Méthodes Principales
1. Pour usage local (standalone)
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
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
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= bytesK= kilobytes (1000 bytes)M= megabytesG= gigabytes
🛠️ Commandes de vérification
# Voir l'utilisation en temps réel
docker stats
# Voir les limites d'un conteneur
docker inspect <container_id> | grep -i "memory\|cpu"
# Tester les limites
docker run --rm -it --cpus="0.5" --memory="512m" alpine:latest
⚠️ Bonnes pratiques
- Toujours définir des limites pour éviter la surconsommation
- Reservation < Limit pour éviter les conflits
- Adapter au hardware : ne pas allouer plus que la machine n'a
- Surveiller l'utilisation avec
docker stats - Penser au swap :
memswap_limitcontrô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
📝 À copier/coller dans votre fichier docker-compose.yml