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

Jak sdílet data mezi kontejnery Docker

Docker kontejnery jsou záměrně izolovaná prostředí. Každý kontejner má svůj vlastní souborový systém, ke kterému nemohou přímo přistupovat jiné kontejnery nebo váš hostitel.

Někdy mohou kontejnery potřebovat sdílet data. I když byste měli usilovat o to, aby kontejnery byly soběstačné, existují scénáře, kdy je sdílení dat nevyhnutelné. Může to být tak, že druhý kontejner může přistupovat ke kombinované mezipaměti, používat databázi zálohovanou souborem, vytvářet zálohu nebo provádět operace s daty generovanými uživateli, jako je kontejner pro optimalizaci obrázků, který zpracovává profilové fotografie nahrané prostřednictvím samostatného kontejneru webového serveru. .

V této příručce se podíváme na několik metod předávání dat mezi vašimi kontejnery Docker. Budeme předpokládat, že jste již Docker nastavili a jste obeznámeni se základními pojmy, jako jsou kontejnery, obrázky, svazky a sítě.

Použití svazků ke sdílení adresáře

Svazky jsou de facto způsob, jak nastavit sdílení dat. Jsou to nezávislé souborové systémy, které ukládají svá data mimo jakýkoli jednotlivý kontejner. Připojení svazku k cestě souborového systému v kontejneru poskytuje přístup pro čtení a zápis k datům svazku.

Svazky lze připojit k více kontejnerům současně. To usnadňuje bezproblémové sdílení a zachování dat, které spravuje Docker.

Začněte vytvořením svazku:

docker volume create --name shared-data

Dále vytvořte kontejnery a připojte svazek k cestě souborového systému očekávané každým obrazem:

docker run -d -v shared-data:/data --name example example-image:latest
docker run -d -v shared-data:/backup-source --name backup backup-image:latest

V tomto příkladu backup kontejner získá účinný přístup k example /data kontejneru adresář. Bude připojen jako /backup-source; změny provedené jedním kontejnerem se projeví v druhém.

Rychlé spuštění kontejnerů s odpovídajícími objemy

Výše uvedený příklad lze zjednodušit pomocí docker run --volumes-from příkazu vlajka. To poskytuje mechanismus pro automatické připojení svazků, které již používá existující kontejner:

docker run -d --volumes-from example --name backup backup-image:latest

Tentokrát backup kontejner obdrží shared-data svazku připojeného do jeho /data adresář. --volumes-from flag stáhne všechny definice svazku připojené k example kontejner. Je zvláště ideální pro zálohovací úlohy a další kontejnery s krátkou životností, které fungují jako pomocné součásti vaší hlavní služby.

Zlepšení bezpečnosti pomocí držáků pouze pro čtení

Svazky jsou ve výchozím nastavení vždy připojeny v režimu čtení a zápisu. Všechny vaše kontejnery s přístupem ke svazku mohou měnit jeho obsah, což může způsobit nechtěnou ztrátu dat.

Nejlepším postupem je připojit sdílené svazky v režimu pouze pro čtení, když se neočekává, že kontejner bude provádět úpravy. Ve výše uvedeném příkladu backup kontejner potřebuje pouze číst obsah shared-data hlasitost. Nastavení připojení do režimu pouze pro čtení vynucuje toto očekávání a zabraňuje chybám nebo škodlivým binárním souborům v obraze smazat data použitá v example kontejner.

docker run -d -v shared-data:/backup-source:ro --name backup backup-image:latest

Přidávání ro jako třetí parametr oddělený dvojtečkou k -v příznak označuje, že svazek by měl být připojen v režimu pouze pro čtení. Můžete také napsat readonly místo ro jako explicitnější alternativu.

Sdílení dat přes síť

Síťové výměny můžete použít jako alternativní přístup ke sdílení dat prostřednictvím svazků souborového systému. Připojení dvou kontejnerů ke stejné síti Docker jim umožňuje bezproblémovou komunikaci pomocí automaticky přiřazených názvů hostitelů:

docker network create demo-network
docker run -d --net demo-network --name first example-image:latest
docker run -d --net demo-network --name second another-image:latest

Zde first bude moci ping second a naopak. Vaše kontejnery by mohly provozovat službu HTTP API, která jim umožní vzájemně interagovat s daty ostatních.

Pokračujeme v příkladu zálohování, nyní vaše backup kontejner může odeslat síťový požadavek na http://example:8080/backup-data získat data k zálohování. example kontejner by měl odpovědět archivem obsahujícím všechna data, která je třeba uložit. Záložní kontejner pak nese odpovědnost za uložení archivu do vhodného úložiště.

Vynucení toho, že ke sdílení dat dochází přes síť, často napomáhá úsilí o oddělení. Skončíte s jasně definovanými rozhraními, která nevytvářejí tvrdé závislosti mezi službami. Přístup k datům lze přesněji řídit odhalením rozhraní API pro každý datový typ namísto poskytování celkového přístupu každého kontejneru ke svazku.

Při použití tohoto přístupu je důležité zvážit zabezpečení. Ujistěte se, že žádná rozhraní HTTP API, která jsou navržena pro interní přístup vašich ostatních kontejnerů Docker, nemají porty vystavené na mostové síti vašeho hostitele Docker. Toto je výchozí chování při použití výše uvedených možností sítě; propojení portu s -p 8080:8080 by umožnil přístup k záložnímu API přes síťová rozhraní vašeho hostitele. To by byl bezpečnostní problém.

Přehled

Kontejnery Docker jsou izolovaná prostředí, která nemají přístup k souborovým systémům ostatních. Data však můžete sdílet vytvořením svazku, který je připojen ke všem zúčastněným kontejnerům. Použití sdílené sítě Docker je alternativní možností, která poskytuje silnější oddělení ve scénářích, kde nejsou nutné přímé interakce se souborovým systémem.

Je dobrým zvykem co nejvíce omezit interakce mezi kontejnery. Případy, kdy potřebujete sdílení dat, by měly být jasně definovány, aby nedošlo k těsnému propojení vašich služeb. Kontejnery, které jsou pevně závislé na datech z jiného kontejner může být složitější na nasazení a údržbu v průběhu času, což narušuje širší výhody kontejnerizace a izolace.


Docker
  1. Jak vytvářet, zobrazovat a mazat kontejnery Docker v systému Linux

  2. Jak sdílet data mezi kontejnery Docker na Ubuntu 22.04

  3. Jak vypsat Docker kontejnery

  1. Jak vytvořit kontejner Anaconda Python Data Science Docker

  2. Jak zálohovat a obnovovat kontejnery Docker

  3. Jak pozastavit a obnovit kontejnery Docker

  1. Jak sdílet data mezi kontejnery Docker

  2. Jak vypsat / spustit / zastavit kontejnery Docker

  3. Jak spravovat kontejnery Docker? Osvědčené postupy