CodeGym /Kursy /Docker SELF /Zarządzanie zasobami kontenerów

Zarządzanie zasobami kontenerów

Docker SELF
Poziom 12 , Lekcja 0
Dostępny

6.1 Powody ograniczania zasobów kontenerów

Docker świetnie radzi sobie z zarządzaniem zasobami kontenerów, co pozwala efektywnie rozdzielać moc systemu i unikać zbędnych konfliktów między kontenerami. Jest to szczególnie ważne, aby aplikacja w jednym kontenerze nie "pożerała" wszystkich zasobów i nie spowalniała pracy innych usług. Ograniczenie takich zasobów, jak procesor (CPU) i pamięć, pomaga unikać przeciążeń, utrzymywać stabilność systemu i gwarantować, że wszystkie aplikacje działają przewidywalnie. W tym wykładzie omówimy, jak ustawić limity na wykorzystanie CPU i pamięci, aby system pozostawał produktywny nawet przy dużym obciążeniu.

Dlaczego ważne jest ograniczanie zasobów kontenerów:

  1. stabilność: zapobieganie sytuacji, gdy jeden kontener zabiera wszystkie zasoby, przez co inne kontenery lub sam system zaczynają zwalniać.
  2. efektywność: lepsze rozdzielanie zasobów między kontenerami, aby maksymalnie efektywnie wykorzystywać moc systemu.
  3. ochrona: ograniczenie zasobów pomaga unikać problemów z kontenerami, które mogą przypadkowo lub celowo przeciążyć system.

6.2 Limity użycia CPU

Docker oferuje kilka sposobów na ograniczenie użycia CPU przez kontenery.

Ważne! Pod CPU tutaj rozumie się jedno rdzenie procesora, a nie cały procesor. Czterordzeniowy procesor ma 4 jednostki CPU.

1. Ograniczenie udziału CPU (--cpu-shares)

Parametr --cpu-shares ustawia względne wartości przyorytetu użycia CPU przez kontener. Domyślna wartość to 1024. Jest to wartość względna, co oznacza, że kontener z --cpu-shares=512 będzie miał połowę priorytetu kontenera z --cpu-shares=1024.

Przykład użycia:

W tym przykładzie kontener high_priority_container będzie miał wyższy priorytet w alokacji CPU niż low_priority_container.

Terminal

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

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

2. Ograniczenie liczby CPU (--cpus)

Parametr --cpus ustawia dokładną liczbę CPU, która będzie dostępna dla kontenera. Na przykład wartość 1.5 oznacza, że kontener może używać 1.5 CPU.

Przykład użycia:

Ten przykład ogranicza kontener limited_cpu_container do użycia nie więcej niż 1.5 CPU.

Terminal


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

3. Ograniczenie czasu użycia CPU (--cpu-quota i --cpu-period)

Parametry --cpu-quota i --cpu-period pozwalają bardziej precyzyjnie kontrolować użycie CPU. --cpu-period ustawia interwał czasu w mikrosekundach (domyślnie 100000), a --cpu-quota ustawia maksymalny czas użycia CPU w tym okresie.

Przykład użycia:

W tym przykładzie kontener custom_cpu_quota_container będzie używał nie więcej niż 50% CPU (25000/50000).

Terminal


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

6.3 Limity na użycie pamięci

Ograniczenie pamięci pozwala kontrolować, ile pamięci operacyjnej może użyć kontener. To pomaga uniknąć sytuacji, gdy jeden kontener zaczyna "pożerać" całą pamięć, wpływając na inne procesy i kontenery.

1. Ograniczenie maksymalnej ilości pamięci (--memory)

Parametr --memory definiuje górny limit pamięci, którą może używać kontener. Jeśli kontener przekroczy ten limit, system zakończy jego działanie.

Przykład użycia:

Ten przykład ogranicza kontener limited_memory_container do użycia maksymalnie 512 MB pamięci operacyjnej.

Terminal

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

2. Ograniczenie ilości pamięci swap (--memory-swap)

Parametr --memory-swap definiuje całkowity limit dla pamięci operacyjnej i swap. Na przykład, jeśli --memory ustawione jest na 512 MB, a --memory-swap na 1 GB, kontener może użyć do 512 MB pamięci operacyjnej i dodatkowo 512 MB swap.

Przykład użycia:

Ten przykład ogranicza kontener swap_limited_container do użycia 512 MB pamięci operacyjnej i 512 MB swap.

Terminal

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

3. Ograniczenie użycia pamięci bez swap (--memory-swap=-1)

Aby zabronić używania swap, ustaw parametr --memory-swap na wartość -1.

Przykład użycia:

Ten przykład ogranicza kontener no_swap_container do 512 MB pamięci operacyjnej bez możliwości użycia swap.

Terminal

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

6.4 Praktyczne scenariusze

1. Uruchamianie zadań o wysokim i niskim priorytecie

Jeśli na jednym serwerze są wykonywane zarówno ważne, jak i drugorzędne zadania, parametr --cpu-shares pomaga podzielić zasoby tak, aby krytyczne zadania otrzymały więcej CPU.

Terminal

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. Ograniczanie zasobów do testowania

Dla testowania aplikacji w warunkach ograniczonych zasobów można ustawić sztywne limity na CPU i pamięć. To pomaga zrozumieć, jak aplikacja będzie działać przy takich ograniczeniach.

Terminal

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

3. Ochrona przed wyczerpaniem zasobów

Aby uniknąć sytuacji, w której jeden kontener zużywa wszystkie dostępne zasoby systemu, można ustawić limity na pamięć i CPU dla wszystkich kontenerów.

Terminal

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