Úvod
Ve výchozím nastavení mají kontejnery Docker přístup k celé paměti RAM a CPU hostitele. Pokud je ponecháte spuštěné s těmito výchozími nastaveními, může to vést k omezení výkonu.
Pokud neomezíte využití paměti a procesoru Dockerem, může Docker využívat všechny systémové prostředky.
V tomto kurzu se dozvíte, jak omezit využití paměti a CPU kontejnery Docker.
Nakonfigurujte systém pro povolení omezení zdrojů
Než budete moci spustit kontejner s omezenými prostředky, zkontrolujte, zda váš systém podporuje tuto možnost Docker. Tato příručka vám ukáže, jak to udělat v Ubuntu, a také jak tuto funkci v případě potřeby povolit.
1. Nejprve spusťte příkaz:
sudo docker info
Pokud obdržíte výstup WARNING: No swap limit support
, omezení zdrojů není ve výchozím nastavení povoleno.
2. Chcete-li přidat tuto možnost, upravte konfigurační soubor grub. Otevřete soubor v textovém editoru dle vašeho výběru (používáme nano):
sudo nano /etc/default/grub
3. Poté přidejte následující řádek:
GRUB_CMDLINE_LINUX="cdgroup_enable=memory swapaccount=1"
4. Uložte změny a ukončete soubor.
5. Poté aktualizujte konfiguraci grub příkazem:
sudo update-grub
6. Nakonec restartujte počítač, aby se změny projevily.
7. Chcete-li ověřit, že jste úspěšně povolili danou funkci Docker, znovu spusťte docker info
příkaz.
Omezit přístup k paměti kontejneru Docker
Existuje několik omezení paměti RAM, která můžete nastavit pro kontejner Docker. Některé z nich zahrnují:
- Konfigurace maximálního množství paměti, kterou může kontejner použít.
- Definování množství paměti, kterou může kontejner Docker vyměnit na disk.
- Nastavení měkkého limitu pro množství paměti přiřazené kontejneru.
Níže zjistěte, jak nakonfigurovat omezení paměti Docker.
Nastavit maximální přístup do paměti
Chcete-li omezit maximální využití paměti pro kontejner, přidejte --memory
možnost docker run
příkaz. Případně můžete použít zkratku -m
.
V rámci příkazu určete, kolik paměti chcete tomuto konkrétnímu kontejneru věnovat.
Příkaz by měl odpovídat syntaxi:
sudo docker run -it --memory="[memory_limit]" [docker_image]
Hodnota memory_limit
by mělo být kladné celé číslo následované příponou b , k , m nebo g (zkratka pro bajty, kilobajty, megabajty nebo gigabajty). Chcete-li například omezit kontejner s 1 GB paměti RAM, přidejte --memory="1g"
.
Chcete-li například spustit instanci kontejneru Ubuntu a nastavit limit paměti na 1 GB, příkaz je:
sudo docker run -it --memory="1g" ubuntu
Nastavit Swap to Disk Memory Limit
Pomocí swap
umožňuje ukládat data i po vyčerpání veškeré paměti RAM přiřazené kontejneru. Dělá to tak, že ignoruje omezení paměti a zapisuje přímo na disk. Ačkoli se jedná o užitečnou funkci, není to doporučený postup, protože zpomaluje výkon.
Chcete-li nakonfigurovat tento dodatečný prostor RAM, definujte celkové množství odkládací paměti. Než to uděláte, měli byste již mít maximální paměť (--memory
) sady neswapovací paměti. Swap zahrnuje celkové množství neswap paměti plus množství odkládací paměti rezervováno jako záloha.
Pokud například nastavíte --memory
na 1 GB , stejně jako v příkladu výše, množství odkládací paměti musí být větší. Chcete-li spustit kontejner s doplňkem 1 GB odkládací paměti, nastavte odkládací paměť na 2 GB .
Syntaxe pro spuštění kontejneru s omezenou pamětí a další odkládací pamětí je:
sudo docker run -it --memory="[memory_limit]" --memory-swap="[memory_limit]" [docker_image]
Chcete-li například spustit kontejner z obrazu Ubuntu s přiřazením 1 GB RAM pro kontejner k použití a rezervováním 1 GB RAM pro odkládací paměť, zadejte:
sudo docker run -it --memory="1g" --memory-swap="2g" ubuntu
Nastavit měkký limit na paměť kontejneru
Omezení využití paměti kontejnerem s --memory
v podstatě nastavuje tvrdou hranici, kterou nelze překonat. Případně můžete nastavit měkký limit (--memory-reservation
), který varuje, když kontejner dosáhne konce přidělené paměti, ale nezastaví žádnou z jeho služeb.
Pokud --memory
omezení viz nejsou nastavena, nastavení měkkého limitu pomocí --memory-reservation
neomezuje úplně prostor kontejneru. Pokud máte povoleny obě funkce, je měkký limit vždy nižší než maximální kapacita prostoru.
Například kontejner Ubuntu má rezervaci paměti 750 MB a maximální kapacita paměti RAM 1 BG , použijte příkaz:
sudo docker run -it --memory="1g" --memory-reservation="750m" ubuntu
Omezit využití CPU kontejneru Docker
Stejně jako využití paměti RAM nemají kontejnery Docker žádná výchozí omezení pro procesor hostitele. Poskytnutí neomezeného využití procesoru kontejnerům může vést k problémům.
Existuje několik způsobů, jak definovat, kolik prostředků CPU z hostitelského počítače chcete přiřadit kontejnerům.
Pokud máte například hostitele se 2 procesory a chcete kontejneru udělit přístup k jednomu z nich, použijte možnost --cpus="1.0"
. Příkaz pro spuštění kontejneru Ubuntu s přístupem k 1 CPU by byl:
sudo docker run -it --cpus="1.0" ubuntu
Můžete také použít --cpu-shares
možnost dát kontejneru větší nebo menší podíl cyklů CPU. Ve výchozím nastavení je tato hodnota nastavena na 1024 .
Chcete-li spustit kontejner s menšími podíly CPU, spusťte:
sudo docker run -it --cpus-shares="700" ubuntu
Další možnosti pro omezení využití CPU kontejneru naleznete v oficiální dokumentaci Docker.