GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak zjednodušit soubory Docker Compose s kotvami a rozšířeními YAML

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.


Docker
  1. Jak zabezpečit citlivá data pomocí tajemství Docker Compose

  2. Jak používat profily služeb ke zjednodušení zásobníků v Docker Compose

  3. Jak nainstalovat a používat Docker Compose na CentOS

  1. Jak nasadit a spravovat MongoDB pomocí Dockeru

  2. Jak nainstalovat a používat Docker Compose na Ubuntu 18.04

  3. Jak nainstalovat a hostovat server OpenVPN pomocí Dockeru

  1. Jak nainstalovat a používat Docker Compose na CentOS 7

  2. Nastavte vývojové prostředí Ruby on Rails pomocí Docker a Docker Compose na Ubuntu

  3. Jak nainstalovat a používat Docker Compose na Ubuntu 20.04