Docker Compose vám umožňuje spravovat více kontejnerů Docker a jejich přidružené prostředky, jako jsou svazky a sítě. Píšete deklarativní soubory YAML, které Compose používá k vytvoření zásobníku kontejnerů.
Váš docker-compose.yml
soubory se mohou při práci se složitým zásobníkem opakovat. Služby mohou sdílet možnosti konfigurace, což způsobí duplikaci částí souboru. Pozdější aktualizace mohou vést k chybám, pokud zapomenete aktualizovat každou instanci sekce.
Protože soubory Compose jsou prosté soubory YAML, můžete využít výhody vestavěných funkcí YAML k modularizaci definic zásobníku. Kotvy, aliasy a rozšíření umožňují abstrahovat sekce YAML do opakovaně použitelných bloků. Odkaz na sekci můžete přidat na každé místo, kde je potřeba.
Co je kotva?
Kotvy YAML jsou funkcí, která vám umožní identifikovat položku a poté na ni odkazovat jinde ve vašem souboru. Kotvy se vytvářejí pomocí &
podepsat. Za znakem následuje alias. Tento alias můžete později použít k odkazování na hodnotu následující za kotvou.
Zde je návod, jak můžete kotvu použít, abyste se vyhnuli opakování zásad restartování kontejneru:
services: httpd: image: httpd:latest restart: &restartpolicy unless-stopped mysql: image: mysql:latest restart: *restartpolicy
Na kotvu se odkazuje pomocí *
postava a její alias. Musíte zajistit, aby mezi &
nebyla mezera /*
znaky a následující název aliasu.
Tento příklad ukazuje, jak lze jednořádkovou hodnotu znovu použít s kotvami. Změnu zásady restartování zásobníku lze nyní provést na jednom místě, aniž byste museli jednotlivě upravovat služby.
Víceřádkové kotvy
Kotvy mohou mít víceřádkové hodnoty. Vytvoříte je pomocí stejné syntaxe jako jednořádkovou kotvu. To je užitečné, když potřebujete poskytnout sadu podrobností o konfiguraci více službám.
services: first: image: my-image:latest environment: &env - CONFIG_KEY - EXAMPLE_KEY - DEMO_VAR second: image: another-image:latest environment: *env
second
služba nyní vtáhne stejné proměnné prostředí jako first
. Seznam proměnných prostředí jsme nemuseli opakovat, takže je v budoucnu mnohem lépe udržovatelný.
Rozšíření kotevních hodnot
Výše uvedený příklad prostředí přebírá hodnotu kotvy a používá ji tak, jak je. Často budete chtít rozšířit kotvu a přidat další hodnoty. Můžete to udělat pomocí alternativní syntaxe.
Upravte second
službu takto:
services: second: image: another-image:latest environment: <<: *env - AN_EXTRA_KEY - SECOND_SPECIFIC_KEY
Služba nyní stahuje konfiguraci základního prostředí z env
Kotva. Další klíče jsou pak přidány do seznamu prostředí. Můžete také přepsat existující klíče definované kotvou.
Použití polí rozšíření
Dalším přístupem k modularizaci jsou rozšiřující pole. Toto jsou speciální fragmenty YAML nejvyšší úrovně, které bude Docker ignorovat.
Docker se obvykle pokouší interpretovat jakýkoli uzel v kořenovém adresáři souboru Compose. Analyzátor bude ignorovat pole rozšíření s předponou x-
. Tato pole můžete použít k zapouzdření sdílené konfigurace pro pozdější použití. Kombinujte pole rozšíření s kotvami do abstraktních sekcí z vašich definic služeb.
x-env: &env environment: - CONFIG_KEY - EXAMPLE_KEY services: first: <<: *env image: my-image:latest second: <<: *env image: another-image:latest
Tento soubor Compose je dalším vylepšením výše uvedeného příkladu. Proměnné prostředí již nepatří k žádné ze služeb. Byly zcela odstraněny do x-env
pole rozšíření.
Toto definuje nový uzel, který obsahuje environment
pole. Používá se kotva YAML (&env
), takže obě služby mohou odkazovat na hodnotu pole rozšíření.
Složitelnost
Využití těchto funkcí vám umožní rozdělit soubory Compose na samostatné bloky. To vám pomůže vyhnout se příliš opakovaným definicím služeb. Vše, co je společné pro více než jednu službu, by mělo být přeneseno do pole rozšíření.
Kromě podpory udržovatelnosti tato praxe sděluje vaše záměry dalším spolupracovníkům. Je jasné, že všechna pole rozšíření nejvyšší úrovně obsahují obecná pole. Nejsou vázány na žádnou konkrétní službu a lze je volně znovu použít.
Kotvy a pole rozšíření umožňují skládat vaše definice služeb z opakovaně použitelných bloků YAML. Tím, že každé pole bude malé, mohou vaše služby kombinovat konfigurační sekce z dostupných kotev. Údržba vašich souborů Compose by měla být méně náročná.
Další přístupy k modularitě
Kromě kotev a rozšíření nezapomeňte, že definice Compose můžete vždy rozdělit do několika souborů Compose. To může být nezbytné, když máte více než hrstku jednotlivých služeb.
Použití více souborů Compose vám umožní přidělit každé službě vlastní soubor. Můžete také vytvořit přepisovací soubory, kde budou nahrazeny nebo rozšířeny hodnoty uzlu. Compose sloučí všechny soubory dohromady a vytvoří konečnou konfiguraci runtime.
service.yml
services: service: image: my-image:latest
service-dev.yml
services: service: environment: - DEV_MODE=true
V tomto příkladu by použití obou souborů Compose vedlo k jedné službě, my-image:latest
, s DEV_MODE
sada proměnných prostředí. Chcete-li s příkazem Compose CLI použít více souborů, předejte -f
příznak:
docker-compose -f service.yml -f service-dev.yml up -d
Soubory jsou sloučeny v určeném pořadí.
Přehled
Soubory Docker Compose mohou být nepraktické a opakující se. Pokud trávíte čas kopírováním hodnot, zvažte abstrahování částí vašich služeb do vyhrazených bloků YAML.
Funkce, jako jsou kotvy a rozšíření, pomáhají udržovatelnosti a usnadňují tvorbu. Ne každý soubor Compose bude mít prospěch – některé služby mohou mít jen málo společného – takže než začnete, zhodnoťte svůj konkrétní zásobník.