在Docker中,你可以透過多種方式來控制容器對系統資源(如CPU和記憶體)的使用份額,以確保容器不會過度消耗宿主機的資源,並與其他容器公平地共享資源。以下是一些常用的方法:
一. 控制CPU資源
-
CPU份額(CPU Shares):
Docker使用CPU份額來分配CPU時間。預設情況下,所有容器具有相同的CPU份額,這意味著它們將等比例地獲得CPU時間。你可以透過--cpu-shares
標誌來設定容器的CPU份額。值越高,容器獲得的CPU時間就越多。docker run --cpu-shares 512 my-image
請注意,這種方法只在CPU密集型任務之間有效,並且只在多核CPU上起作用。
-
CPU限制(CPU Quotas):
你可以使用--cpus
標誌來限制容器可以使用的CPU核心數。這對於確保容器不會使用超過指定數量的CPU核心非常有用。docker run --cpus 1.5 my-image
這將限制容器只能使用1.5個CPU核心。
-
CPU週期和配額(CPU Period and Quota):
你還可以使用--cpu-period
和--cpu-quota
標誌來更精細地控制容器的CPU使用率。--cpu-period
是CPU時間片的長度,而--cpu-quota
是在一個週期內容器可以使用的CPU時間。docker run --cpu-period 100000 --cpu-quota 50000 my-image
這將限制容器在每100,000微秒(0.1秒)的週期中只能使用50,000微秒的CPU時間。
二. 控制記憶體資源
-
記憶體限制(Memory Limit):
使用--memory
標誌來限制容器可以使用的記憶體量。這有助於防止容器消耗過多的記憶體資源。docker run --memory 512m my-image
這將限制容器只能使用512MB的記憶體。
-
記憶體交換(Memory Swap):
使用--memory-swap
標誌來設定容器的記憶體加交換空間的總限制。這允許容器使用超過其分配的記憶體量,但會將部分資料交換到磁碟上。docker run --memory 512m --memory-swap 1g my-image
這將限制容器的總記憶體使用量(包括交換空間)為1GB。
-
記憶體限制預留(Memory Reservation):
使用--memory-reservation
標誌來為容器預留一定數量的記憶體。這確保了容器至少有這麼多記憶體可用,但不會限制其使用更多的記憶體(如果可用)。docker run --memory-reservation 256m my-image
這將為容器預留256MB的記憶體。
-
核心記憶體限制(Kernel Memory Limit):
使用--kernel-memory
標誌來限制容器可以使用的核心記憶體量。核心記憶體是作業系統用於快取和緩衝區的記憶體。docker run --kernel-memory 64m my-image
這將限制容器只能使用64MB的核心記憶體。
綜上所述,Docker可以靈活地控制容器佔用系統CPU和記憶體資源的份額,以滿足不同的資源隔離和效能要求。此外,還可以結合 docker-compose.yml
檔案或者 Kubernetes 中的相關資源請求與限制進行更復雜的資源管理。