Programování

Výukový program Docker: Začínáme se sítí Docker

Běžným případem použití Dockeru jsou síťové služby a Docker má svůj vlastní síťový model, který umožňuje kontejnerům mluvit navzájem i s vnějším světem.

Kontejnery Docker musely být původně ručně propojeny do sítě nebo vystaveny ručně vnějšímu světu. Aktuální síťový model umožňuje kontejnerům, aby se navzájem automaticky vyhledávaly na stejném hostiteli (nebo napříč různými hostiteli) a aby byly kontrolovanějším způsobem vystaveny širšímu světu.

Existují čtyři základní způsoby, jak Docker dodává vývojářům síť pro kontejnery. První dva, most a překrytí pokrytí nejběžnějších případů použití ve výrobě. Další dva, hostitel a Macvlan sítě, které pokrývají méně běžné případy.

Docker networking: mostní sítě

Mostní sítě nechte kontejnery běžící na stejném hostiteli Dockeru vzájemně komunikovat. Nová instance Dockeru přichází s výchozí mostní sítí s názvem mosta ve výchozím nastavení se k němu připojují všechny nově spuštěné kontejnery.

The most síť přichází s mnoha pohodlnými výchozími nastaveními, ale ve výrobě bude možná nutné doladit. Například kontejnery na most automaticky mít vystaveny všechny porty navzájem, ale žádný vnějšímu světu. To je užitečné, když potřebujete otestovat komunikaci mezi kontejnery, ale ne pro nasazení živé služby.

Nejlepších výsledků dosáhnete vytvořením vlastní mostní sítě. Uživatelem definované mosty mají mnoho funkcí most most není:

  • Rozlišení DNS funguje automaticky mezi kontejnery na vlastním mostě. Tímto způsobem nemusíte mezi sebou komunikovat surovými IP adresami, jako to děláte na internetu most most. Kontejnery mohou pomocí názvu kontejneru vyhledat jiné kontejnery prostřednictvím DNS.
  • Kontejnery lze přidávat a odebírat z vlastního mostu, když jsou v provozu.
  • Proměnné prostředí lze sdílet mezi kontejnery na vlastním mostě.

Stručně řečeno, můžete začít vrtat s kontejnery pomocí výchozího mostu, ale pro každou seriózní produkční práci budete chtít vytvořit vlastní most.

Docker networking: překryvné sítě

Mostní sítě jsou pro kontejnery na stejném hostiteli. Překrytí sítě jsou pro kontejnery běžící na různých hostitelích, například v Dockerově roji. Díky tomu se kontejnery mezi hostiteli mohou navzájem najít a komunikovat, aniž byste se museli starat o to, jak to nastavit pro každý jednotlivý zúčastněný kontejner.

Orchestrátor režimu roje Docker automaticky vytvoří překrývající se síť, vniknutí. Ve výchozím nastavení se k jakékoli službě v roji připojí vniknutí. Ale stejně jako u výchozího nastavení most, to není nejlepší volba pro produkční systém, protože výchozí nastavení nemusí být vhodná. Nejlepším řešením je vytvořit vlastní překryvnou síť s rojem nebo bez ní a podle potřeby k ní připojit uzly.

Pokud chcete použít překryvnou síť s kontejnery, které neběží v roji, je to další případ použití pro vytvoření vlastní překryvné sítě. Všimněte si, že každý hostitel Dockeru v překryvné síti musí mít správné porty otevřené svým vrstevníkům, aby bylo vidět, a bez režimu roje potřebuje každý uzel přístup k nějakému úložišti klíč-hodnota.

Všimněte si také, že překryvné sítě ve výchozím nastavení povolují pouze 256 odlišných IP adres. Tento limit můžete zvýšit, ale Docker doporučuje místo toho použít více překrytí.

Docker networking: Hostování sítí

The hostitel síťový ovladač umožňuje kontejnerům spouštět jejich síťové zásobníky vedle sebe se zásobníkem na hostiteli. Webový server na portu 80 v a hostitel-síťový kontejner je k dispozici z portu 80 na samotném hostiteli.

Největším přínosem síťování hostitelů je rychlost. Pokud potřebujete poskytnout přístup k portu kontejneru a chcete jej co nejvíce přiblížit základnímu OS, je to způsob, jak jít. Přichází to však za cenu flexibility: Pokud mapujete port 80 na kontejner, žádný jiný kontejner jej na tomto hostiteli nemůže použít.

Síť Docker: Sítě Macvlan

Síť Macvlan je pro aplikace, které pracují přímo se základní fyzickou sítí, jako jsou aplikace pro monitorování síťového provozu. The macvlan ovladač nepřiřadí kontejneru pouze IP adresu, ale také fyzickou MAC adresu.

Všimněte si, že tento typ Dockerovy sítě přichází s mnoha stejnými upozorněními, které byste měli, kdybyste například vytvářeli virtuální adresy MAC pomocí virtuálních počítačů. Stručně řečeno, Macvlan by měl být vyhrazen pouze pro aplikace, které nefungují, pokud se nespoléhají na fyzickou síťovou adresu.

Docker networking: Vytváření a správa sítí

Veškerá správa sítě v Dockeru se provádí pomocí dokovací síť příkaz. Mnoho z jeho dílčích příkazů je podobných ostatním příkazům Dockeru; například, docker network ls zobrazí všechny nakonfigurované sítě v aktuální instanci Dockeru:

$ docker network ls ID SÍTĚ NÁZEV ROZSAH ŘIDIČE 2e0adaa0ce4a most most lokální 0de3da43b973 hostitel hostitel lokální 724a28c6d86d žádný null místní

Chcete-li vytvořit síť, použijte vytvořit dílčí příkaz spolu s --Řidič příznak označující, který ovladač použít (most, překrytí, macvlan):

$ docker network create --driver bridge my-bridge 

Kontejnery hostované v síti nevyžadují vytvoření sítě pro ně. Místo toho spusťte kontejner pomocí - hostitel sítě vlajka. Všechny procesy v kontejneru naslouchají na jejich předkonfigurovaných portech, proto se ujistěte, že jsou nastaveny jako první.

Mezi možnosti vytvoření sítě patří také zadání její podsítě, rozsahu adres IP a síťové brány, stejně jako by tomu bylo v případě vytvoření sítě jinými prostředky.

Kontejnery běží ve výchozím nastavení na most síť. Chcete-li použít konkrétní síť, použijte --síť příznak při spuštění kontejneru a zadejte název sítě.

Běžící kontejner můžete také spárovat se sítí:

$ docker network connect bridge my_container

To se připojujemy_container do most síť, při zachování všech stávajících síťových připojení, která již má.

Když je kontejner roztočen dolů, všechny sítě s ním spojené zůstanou nedotčené. Pokud chcete sítě odstranit ručně, můžete tak učinit pomocí docket network rm příkaz nebo použít docker network prun odebrat všechny sítě, které se na hostiteli již nepoužívají.

Docker networking a Kubernetes networking

Pokud se díváte na Kubernetes jako na orchestrační řešení, ale již máte spoustu práce zapuštěné do nastavení sítě Docker, nebudete nadšeni, když slyšíte, že neexistuje žádná individuální korespondence mezi tím, jak Docker a Kubernetes zvládají práci v síti.

Podrobnosti jsou popsány v dokumentaci Kubernetes, ale krátká verze je, že mají zásadně odlišné modely způsobu, jakým jsou alokovány a spravovány síťové prostředky. Budete tedy muset pro svoji aplikaci navrhnout síťové nastavení specifické pro Kubernetes.

Jedním z možných přístupů na půli cesty je použití pluginu Kubernetes Container Network Interface (CNI), který funguje s vlastními síťovými ovládacími prvky Dockeru. Ale toto je přinejlepším dočasné řešení; v určitém okamžiku budete muset budovat své projekty Kubernetes pomocí vlastních síťových metafor zevnitř ven.

$config[zx-auto] not found$config[zx-overlay] not found