Některé z nejčastějších dotazů našich uživatelů se týkají podpory MariaDB v Dockeru, a zejména toho, jak ji lze použít v konkrétních vývojových nebo produkčních nasazeních. Tato série článků se pokusí pokrýt několik případů použití Docker a MariaDB.
Proč zvolit Docker pro MariaDB?
- Kontejnery Docker lze použít k testování, nasazení a vydání aplikací v jakémkoli prostředí.
- Nasazení dockerů lze snadno automatizovat, vytvářet prostředí pro nasazení a snadno je reprodukovat ve fázi a produkci.
- Docker je lehká virtualizace. Hypervizory nejsou potřeba a kontejner MariaDB Docker by měl fungovat stejně dobře jako běžná instalace MariaDB bez jakékoli znatelné režie.
- Docker je agnostický – jakmile nainstalujete Docker do svého operačního systému, pokyny pro spouštění kontejnerů jsou naprosto stejné, ať už používáte CentOS, Debian nebo Ubuntu, nebo dokonce Mac OS X a Windows.
Několik důležitých bodů o kontejnerech Docker
- Docker kontejnery jsou neměnné. Po spuštění je nelze snadno upravit (pokud se k nim nepřipojíte a vše nerozbijete).
- Ve výchozím nastavení a kvůli výše uvedenému nejsou data trvalá. Docker k nápravě používá objemy dat. Kontejner MariaDB používá svazek k uchování dat (více o tom později).
Stav MariaDB v Dockeru
MariaDB byla vždy několik let velmi dobře podporována v Dockeru, díky mnoha snahám týmu a komunity Docker. Docker dodnes podporuje všechna tři vydání MariaDB:5.5, 10.0 a 10.1. Dokovací kontejner MariaDB má následující zvláštnosti:
- Kořenové heslo MariaDB lze nastavit nebo vygenerovat pomocí proměnných prostředí.
- Nového uživatele a prázdnou databázi lze vytvořit stejným postupem jako výše.
- Instance má výchozí trvalý objem dat /var/lib/mysql, který můžete dockeru nechat spravovat interně nebo jej připojit do adresáře podle vašeho výběru.
- Instanci kontejneru lze připojit k existujícímu datovému svazku (například k zálohě).
- Síťové porty mohou být svázány s libovolnými porty na straně hostitele.
- Znalostní báze MariaDB obsahuje rozsáhlý dokumentační článek o dockeru. Přečtěte si to!
Případ použití Dockeru č. 1:Vícenásobný nájem
Běžným případem použití pro MariaDB a Docker je spuštění několika instancí MariaDB na stejných fyzických hostitelích. Již existují řešení, jako je MySQL Sandbox a další, ale žádné z nich neposkytuje flexibilitu, snadné použití a výkon, které Docker nabízí.
Abychom ilustrovali náš názor, začněme tři různé instance MariaDB, z nichž každá používá jinou hlavní verzi:
docker run -d -p 3301:3306 -v ~/mdbdata/mdb55:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin --name mdb55 mariadb:5.5
docker run -d -p 3302:3306 -v ~/mdbdata/mdb10:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin --name mdb10 mariadb:10.0
docker run -d -p 3303:3306 -v ~/mdbdata/mdb11:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin --name mdb11 mariadb:10.1
Docker automaticky stáhne oficiální obrázky mariadb z úložiště a spustí je. Nyní se můžeme jednoduše připojit k jakékoli z těchto instancí pomocí poskytnutého portu a hesla:
$ mysql -u root -padmin -h 127.0.0.1 -P3302 Welcome to the MariaDB monitor. Commands end with ; or g. Your MariaDB connection id is 2 Server version: 10.0.22-MariaDB-1~jessie mariadb.org binary distribution
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
Všimněte si, že každá z našich instancí bude používat trvalý objem dat umístěný pod ~/mdbdata adresář – Docker za nás automaticky vytvoří tento adresářový strom.
Nyní, když jsme to udělali, pojďme se ponořit do pokročilých funkcí Dockeru. Docker podporuje linuxové kontrolní skupiny (cgroups), které lze použít k omezení, účtování nebo izolaci využití zdrojů. Řekněme, že chceme naši instanci MariaDB 10.1 (s názvem mdb11 ), aby měl vyšší prioritu CPU než ostatní dvě instance. V tomto případě můžeme snížit podíl CPU mdb10 a mdb55 . Každá instance má ve výchozím nastavení maximálně 1024 sdílených CPU, takže pojďme znovu vytvořit náš mdb55 a mdb10 kontejnery s 512 sdílenými CPU.
V preambuli jsme řekli, že kontejnery Docker jsou neměnné. Pokud chceme změnit parametry našich kontejnerů, musíme je odstranit. Toto není problém, protože jsme definovali trvalé objemy dat v ~/mdbdata, takže skutečný obsah naší databáze zůstane zachován, když kontejnery znovu vytvoříme.
docker rm -f mdb55 mdb10
docker run -d -p 3301:3306 --cpu-shares=512 -v ~/mdbdata/mdb55:/var/lib/mysql --name mdb55 mariadb:5.5
docker run -d -p 3302:3306 --cpu-shares=512 -v ~/mdbdata/mdb10:/var/lib/mysql --name mdb10 mariadb:10.0
Znovu jsme vytvořili dvě instance MariaDB s 512 sdílenými CPU. Toto je však měkký limit a je vynucován pouze tehdy, když procesy soutěží o cykly CPU. Pokud jsou ostatní instance nečinné, jakákoli instance je schopna využít až 100 % všech CPU. V praxi to znamená, že pokud všechny tři instance používají CPU současně, každý ze dvou prvních kontejnerů, z nichž každý má 512 sdílení, (mdb55 a mdb10 ) bude moci využívat až 25 % všech CPU, zatímco třetí kontejner, který má 1024 sdílených položek, bude moci využívat až 50 % všech CPU.
Další možností je svázat instanci s konkrétním jádrem CPU, takže znovu vytvořte kontejnery a udělejte to:
docker rm -f mdb55 mdb10 mdb11
docker run -d -p 3301:3306 --cpuset-cpus=0 -v ~/mdbdata/mdb55:/var/lib/mysql --name mdb55 mariadb:5.5
docker run -d -p 3302:3306 --cpuset-cpus=1 -v ~/mdbdata/mdb10:/var/lib/mysql --name mdb10 mariadb:10.0
docker run -d -p 3303:3306 --cpuset-cpus=2-3 -v ~/mdbdata/mdb10:/var/lib/mysql --name mdb11 mariadb:10.1
Ve výše uvedeném příkladu, vzhledem k systému se 4 jádry CPU, mé kontejnery mdb55 a mdb10 poběží každý na samostatném jediném jádru CPU, zatímco mdb11 budou obě zbývající jádra.
Můžeme také řídit způsob, jakým naše kontejnery přistupují k diskovým a paměťovým prostředkům, což je rozhodně užitečné na zaneprázdněném systému – nechcete například utécivý vývojový dotaz využívající celý disk vašich instancí zátěžového testování. Zatímco limity paměti jsou jednoduché, blokové IO sdílení fungují podobným způsobem jako CPU sdílené s tím rozdílem, že výchozí blokové IO sdílení je 500 v rozsahu 10 až 1000.
Omezme naše dva první kontejnery na 512 milionů paměti a 250 blokových IO sdílení:
docker rm -f mdb55 mdb10
docker run -d -p 3301:3306 --blkio-weight=250 --memory=512M -v ~/mdbdata/mdb55:/var/lib/mysql --name mdb55 mariadb:5.5
docker run -d -p 3302:3306 --blkio-weight=250 --memory=512M -v ~/mdbdata/mdb10:/var/lib/mysql --name mdb10 mariadb:10.0
Podobně jako to, co jsme viděli v příkladu sdílení CPU, pokud tři instance soutěží o IO, každý z prvních dvou kontejnerů bude omezen na 25 % dostupné IO kapacity, přičemž třetí kontejner bude omezen na zbývající kapacitu, např. 50 %.
Omezení běhového prostředí Dockeru je mnohem více, než o čem jsme mluvili zde v tomto článku. Přečtěte si rozsáhlou referenci ke spuštění Dockeru, kde se dozvíte o všech možných možnostech.