CodeGym /課程 /Docker SELF /容器資源管理

容器資源管理

Docker SELF
等級 12 , 課堂 0
開放

6.1 為什麼要限制容器的資源

Docker 完全能夠管理容器的資源,這讓系統資源能被高效地分配,並避免容器之間不必要的衝突。這件事尤其重要,因為我們不希望某個容器上的應用程式「吃掉」所有資源,導致其他服務停止運作。限制像 CPU 和記憶體這樣的資源,可以避免超載,保持系統穩定性,並確保所有應用能正常運行。在這堂課中,我們會學到如何設置 CPU 和記憶體的使用限制,確保系統即使在高負載情況下仍保持高效。

為什麼限制容器資源很重要:

  1. 穩定性: 防止某一個容器佔用所有資源,導致其他容器或系統本身開始減速。
  2. 效率: 更好地分配資源,讓系統性能被最大化利用。
  3. 保護: 限制資源幫助避免因為容器意外或者故意超載系統而出現的問題。

6.2 使用 CPU 的限制

Docker 提供了一些方式來限制容器使用 CPU 的能力。

重要! 這裡的 CPU 是指單個處理器核心,而不是整個處理器。四核心處理器會有 4 個 CPU

1. 限制 CPU (--cpu-shares) 的分配比例

參數 --cpu-shares 用來設定容器使用 CPU 的相對優先級。默認值是 1024。這是一個相對值,這表示設定 --cpu-shares=512 的容器會比設定 --cpu-shares=1024 的容器低一半的優先級。

使用範例:

在這個範例中,容器 high_priority_container 在分配 CPU 時,會比 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. 限制 CPU (--cpus) 的數量

參數 --cpus 設定容器可用的 CPU 數量。例如,值為 1.5 表示容器可以使用 1.5 個 CPU

使用範例:

這個範例限制了 limited_cpu_container 容器最多只能使用 1.5 個 CPU

Terminal


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

3. 限制 CPU 時間的使用 (--cpu-quota 和 --cpu-period)

參數 --cpu-quota--cpu-period 允許更細緻地調整 CPU 的使用量。--cpu-period 設定以微秒為單位的時間間隔(默認為 100000),而 --cpu-quota 設定該期間內可使用 CPU 的最長時間。

使用範例:

在這個範例中,容器 custom_cpu_quota_container 使用的 CPU 不會超過 50%(25000/50000)。

Terminal


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

6.3 記憶體使用限制

記憶體限制能控制容器最多可以使用多少記憶體。這有助於避免某個容器開始「吃掉」所有記憶體,影響到其他進程和容器。

1. 記憶體最大限制 (--memory)

參數 --memory 設定容器可使用記憶體的上限。如果容器超出這個限制,系統會終止它。

使用範例:

此範例限制容器 limited_memory_container 使用不超過 512 MB 的記憶體。

Terminal

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

2. 記憶體加上 swap 限制 (--memory-swap)

參數 --memory-swap 設定記憶體和 swap 總量的上限。例如若 --memory 設定為 512 MB,--memory-swap 設定為 1 GB,容器最多可以使用 512 MB 記憶體以及額外 512 MB 的 swap。

使用範例:

此範例限制容器 swap_limited_container 使用 512 MB 記憶體和 512 MB swap。

Terminal

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

3. 禁止使用 swap 的記憶體限制 (--memory-swap=-1)

若要禁止使用 swap,將參數 --memory-swap 設置為 -1。

使用範例:

此範例限制容器 no_swap_container 使用 512 MB 記憶體且不能使用 swap。

Terminal

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

6.4 實際場景應用

1. 執行高優先級與低優先級任務

如果在同一台伺服器上同時執行重要的和次要的任務,參數 --cpu-shares 可以幫助分配資源,確保關鍵任務獲得更多 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. 測試資源限制

為了在有限資源條件下測試應用程式,可以設定嚴格的 CPU 和記憶體限制。這有助於了解應用程式在這些限制下的運行狀況。

Terminal

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

3. 防止資源耗盡

為了避免一個容器耗盡系統所有可用資源,可以為所有容器設定記憶體與 CPU 的限制。

Terminal

docker run -d --name isolated_container --cpus="2" --memory="1g" my_app_image
3
任務
Docker SELF, 等級 12, 課堂 0
上鎖
限制容器的 CPU 使用量
限制容器的 CPU 使用量
3
任務
Docker SELF, 等級 12, 課堂 0
上鎖
設定容器的記憶體限制
設定容器的記憶體限制
3
任務
Docker SELF, 等級 12, 課堂 0
上鎖
限制容器的CPU和記憶體使用
限制容器的CPU和記憶體使用
3
任務
Docker SELF, 等級 12, 課堂 0
上鎖
限制容器內存交換空間的使用量
限制容器內存交換空間的使用量
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION