CodeGym /Corsi /Docker SELF /Gestione delle risorse dei container

Gestione delle risorse dei container

Docker SELF
Livello 12 , Lezione 0
Disponibile

6.1 Motivi per limitare le risorse dei container

Docker è fantastico nella gestione delle risorse dei container, permettendo di distribuire efficacemente la potenza del sistema ed evitare conflitti inutili tra i container. Questo è particolarmente importante per garantire che un'app in un container non "consumi" tutte le risorse e non rallenti il funzionamento di altri servizi. Limitare risorse come il processore (CPU) e la memoria aiuta a prevenire sovraccarichi, mantenere la stabilità del sistema e assicurare che tutte le applicazioni funzionino in modo prevedibile. In questa lezione vedremo come impostare i limiti per l'utilizzo della CPU e della memoria, per mantenere il sistema produttivo anche in condizioni di alto carico.

Perché è importante limitare le risorse dei container:

  1. stabilità: prevenire situazioni in cui un container utilizza tutte le risorse, causando rallentamenti per gli altri container o per il sistema stesso.
  2. efficienza: distribuire meglio le risorse tra i container, per utilizzare al massimo la potenza del sistema.
  3. protezione: limitare le risorse aiuta a evitare problemi con i container che potrebbero accidentalmente o intenzionalmente sovraccaricare il sistema.

6.2 Limiti sull'utilizzo di CPU

Docker offre diversi modi per limitare l'utilizzo di CPU da parte dei container.

Importante! Qui con CPU si intende un singolo core del processore, non l'intero processore. Un processore quad-core avrà 4 CPU.

1. Limitazione della quota CPU (--cpu-shares)

Il parametro --cpu-shares imposta un valore relativo di priorità per l'utilizzo della CPU da parte del container. Il valore predefinito è 1024. Questo è un valore relativo, il che significa che un container con --cpu-shares=512 avrà metà della priorità rispetto a un container con --cpu-shares=1024.

Esempio d'uso:

In questo esempio, il container high_priority_container avrà una priorità maggiore nell'assegnazione della CPU rispetto a low_priority_container.

Terminale

docker run -d --name low_priority_container --cpu-shares=512 nginx

docker run -d --name high_priority_container --cpu-shares=2048 nginx

2. Limitazione del numero di CPU (--cpus)

Il parametro --cpus imposta il numero esatto di CPU disponibili per il container. Ad esempio, il valore 1.5 significa che il container può utilizzare fino a 1.5 CPU.

Esempio d'uso:

Questo esempio limita il container limited_cpu_container a utilizzare non più di 1.5 CPU.

Terminale


        docker run -d --name limited_cpu_container --cpus="1.5" nginx
    

3. Limitazione del tempo di utilizzo della CPU (--cpu-quota e --cpu-period)

I parametri --cpu-quota e --cpu-period permettono una configurazione più precisa dell'utilizzo della CPU. --cpu-period imposta l'intervallo di tempo in microsecondi (di default 100000), mentre --cpu-quota imposta il tempo massimo di utilizzo della CPU per quel periodo.

Esempio d'uso:

In questo esempio, il container custom_cpu_quota_container utilizzerà non più del 50% della CPU (25000/50000).

Terminale


        docker run -d --name custom_cpu_quota_container --cpu-period=50000 --cpu-quota=25000 nginx

6.3 Limiti sull'utilizzo della memoria

Limitare la memoria ti permette di controllare quanta memoria RAM può usare un container. Questo aiuta ad evitare che un container cominci a "mangiarsi" tutta la memoria, influenzando gli altri processi e container.

1. Limitazione del volume massimo di memoria (--memory)

Il parametro --memory imposta il limite massimo di memoria che un container può usare. Se il container supera questo limite, il sistema lo termina.

Esempio di utilizzo:

Questo esempio limita il container limited_memory_container all'uso di non più di 512 MB di RAM.

Terminal

docker run -d --name limited_memory_container --memory="512m" nginx

2. Limitazione del volume di memoria swap (--memory-swap)

Il parametro --memory-swap imposta il limite totale per RAM e swap. Per esempio, se --memory è impostato su 512 MB e --memory-swap su 1 GB, il container può usare fino a 512 MB di RAM e altri 512 MB di swap.

Esempio di utilizzo:

Questo esempio limita il container swap_limited_container all'uso di 512 MB di RAM e 512 MB di swap.

Terminal

docker run -d --name swap_limited_container --memory="512m" --memory-swap="1g" nginx

3. Limitazione dell'uso della memoria senza swap (--memory-swap=-1)

Per proibire l'uso dello swap, imposta il parametro --memory-swap a -1.

Esempio di utilizzo:

Questo esempio limita il container no_swap_container a 512 MB di RAM senza possibilità di usare lo swap.

Terminal

docker run -d --name no_swap_container --memory="512m" --memory-swap="-1" nginx

6.4 Scenari pratici

1. Esecuzione di task ad alta e bassa priorità

Se su un server vengono eseguiti sia task importanti che secondari, il parametro --cpu-shares aiuta a distribuire le risorse in modo che i task critici ottengano più CPU.

Terminale

docker run -d --name high_priority_task --cpu-shares=2048 my_high_priority_image
docker run -d --name low_priority_task --cpu-shares=512 my_low_priority_image

2. Limitazione delle risorse per i test

Per testare le applicazioni in condizioni di risorse limitate, è possibile impostare limiti rigidi su CPU e memoria. Questo aiuta a capire come l'applicazione funzionerà con tali restrizioni.

Terminale

docker run -d --name test_container --cpus="1" --memory="256m" my_test_image

3. Protezione contro l'esaurimento delle risorse

Per evitare situazioni in cui un singolo container utilizzi tutte le risorse di sistema disponibili, è possibile impostare limiti su memoria e CPU per tutti i container.

Terminale

docker run -d --name isolated_container --cpus="2" --memory="1g" my_app_image
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION