Introduzione
Per impostazione predefinita, i container Docker hanno accesso alla RAM completa e alle risorse CPU dell'host. Lasciarli funzionare con queste impostazioni predefinite può causare colli di bottiglia nelle prestazioni.
Se non limiti la memoria di Docker e l'utilizzo della CPU, Docker può utilizzare tutte le risorse di sistema.
In questo tutorial, scopri come limitare l'utilizzo della memoria e della CPU dei contenitori Docker.
Configura il sistema per abilitare la limitazione delle risorse
Prima di poter eseguire un container con risorse limitate, controlla se il tuo sistema supporta questa opzione Docker. Questa guida ti mostra come farlo in Ubuntu e come abilitare questa funzione se necessario.
1. Innanzitutto, esegui il comando:
sudo docker info
Se ricevi l'output WARNING: No swap limit support
, la limitazione delle risorse non è stata abilitata per impostazione predefinita.
2. Per aggiungere questa opzione, modifica il file di configurazione di grub. Apri il file in un editor di testo a tua scelta (stiamo usando nano):
sudo nano /etc/default/grub
3. Quindi, aggiungi la seguente riga:
GRUB_CMDLINE_LINUX="cdgroup_enable=memory swapaccount=1"
4. Salva le modifiche ed esci dal file.
5. Quindi, aggiorna la configurazione di grub con il comando:
sudo update-grub
6. Infine, riavvia il computer affinché le modifiche avvengano.
7. Per verificare di aver abilitato correttamente la funzione Docker specificata eseguendo nuovamente le docker info
comando.
Limita l'accesso alla memoria del contenitore Docker
Esistono diverse limitazioni della RAM che puoi impostare per un contenitore Docker. Alcuni di essi includono:
- Configurazione della quantità massima di memoria utilizzabile da un container.
- Definire la quantità di memoria che un container Docker può scambiare su disco.
- Impostazione del limite software per la quantità di memoria assegnata a un contenitore.
Di seguito, scopri come configurare i limiti di memoria Docker.
Imposta l'accesso massimo alla memoria
Per limitare la quantità massima di utilizzo della memoria per un contenitore, aggiungi il --memory
opzione per la docker run
comando. In alternativa, puoi utilizzare la scorciatoia -m
.
All'interno del comando, specifica quanta memoria vuoi dedicare a quel contenitore specifico.
Il comando dovrebbe seguire la sintassi:
sudo docker run -it --memory="[memory_limit]" [docker_image]
Il valore di memory_limit
dovrebbe essere un numero intero positivo seguito dal suffisso b , k , mi o g (abbreviazione di byte, kilobyte, megabyte o gigabyte). Ad esempio, per limitare il contenitore a 1 GB di RAM, aggiungi --memory="1g"
.
Ad esempio, per eseguire un'istanza di un container Ubuntu e impostare il limite di memoria su 1 GB, il comando è:
sudo docker run -it --memory="1g" ubuntu
Imposta Swap su Limite memoria disco
Usando lo swap
l'opzione consente di memorizzare i dati anche dopo che tutta la RAM assegnata al contenitore è stata esaurita. Lo fa ignorando la limitazione della memoria e scrivendo direttamente sul disco. Sebbene questa sia una funzione utile, non è una pratica consigliata in quanto rallenta le prestazioni.
Per configurare questo spazio RAM aggiuntivo, definire la quantità totale di memoria di scambio. Prima di farlo, dovresti già avere la memoria massima (--memory
) del set di memoria non di swap. Lo scambio include la quantità totale di memoria non di scambio più la quantità di memoria di scambio riservato come backup.
Ad esempio, se imposti --memory
a 1 GB , come nell'esempio sopra, la quantità di memoria di scambio deve essere maggiore. Per eseguire un container con un aggiuntivo 1 GB di memoria di scambio, imposta la memoria di scambio su 2 GB .
La sintassi per eseguire un contenitore con memoria limitata e memoria di scambio aggiuntiva è:
sudo docker run -it --memory="[memory_limit]" --memory-swap="[memory_limit]" [docker_image]
Ad esempio, per eseguire un contenitore dall'immagine Ubuntu, assegnando 1 GB di RAM al contenitore da utilizzare e riservando 1 GB di RAM per la memoria di scambio, digitare:
sudo docker run -it --memory="1g" --memory-swap="2g" ubuntu
Imposta il limite morbido alla memoria del contenitore
Limitare l'utilizzo della memoria di un contenitore con --memory
essenzialmente sta fissando un limite rigido che non può essere superato. In alternativa, puoi impostare un limite soft (--memory-reservation
) che avverte quando il container raggiunge la fine della memoria assegnata ma non interrompe nessuno dei suoi servizi.
Se --memory
le limitazioni vedi non sono impostate, impostando il limite soft con --memory-reservation
non limita completamente lo spazio del contenitore. Se hai entrambe le funzioni abilitate, il limite soft è sempre inferiore alla capacità di spazio massima.
Ad esempio, per un container Ubuntu avere la riserva di memoria di 750 MB e la capacità RAM massima di 1 GB , usa il comando:
sudo docker run -it --memory="1g" --memory-reservation="750m" ubuntu
Limita l'utilizzo della CPU del contenitore Docker
Proprio come l'utilizzo della RAM, i contenitori Docker non hanno limitazioni predefinite per la CPU dell'host. Dare ai contenitori un utilizzo illimitato della CPU può causare problemi.
Esistono diversi modi per definire la quantità di risorse CPU dalla macchina host che desideri assegnare ai contenitori.
Ad esempio, se si dispone di un host con 2 CPU e si desidera concedere a un container l'accesso a una di esse, utilizzare l'opzione --cpus="1.0"
. Il comando per eseguire un contenitore Ubuntu con accesso a 1 CPU sarebbe:
sudo docker run -it --cpus="1.0" ubuntu
Puoi anche utilizzare il --cpu-shares
opzione per assegnare al contenitore una proporzione maggiore o minore di cicli della CPU. Per impostazione predefinita, è impostato su 1024 .
Per eseguire un contenitore con condivisioni CPU inferiori, esegui:
sudo docker run -it --cpus-shares="700" ubuntu
Per trovare altre opzioni per limitare l'utilizzo della CPU del contenitore, fai riferimento alla documentazione ufficiale di Docker.