Programovanie

Výukový program pre Docker: Začíname pracovať so sieťami Docker

Bežným prípadom použitia Dockeru sú sieťové služby a Docker má svoj vlastný sieťový model, ktorý umožňuje kontajnerom hovoriť medzi sebou aj s vonkajším svetom.

Kontajnery Docker museli byť pôvodne vzájomne prepojené ručne alebo manuálne vystavené vonkajšiemu svetu. Aktuálny model siete umožňuje, aby sa kontajnery našli navzájom automaticky na rovnakom hostiteľovi (alebo naprieč rôznymi hostiteľmi) a aby boli kontrolovanejšie vystavení celému svetu.

Existujú štyri základné spôsoby, ako Docker dodáva vývojárom siete pre kontajnery. Prvé dva, Most a prekrytie pokrytie najbežnejších prípadov použitia vo výrobe. Ďalšie dve, hostiteľ a Macvlan siete existujú na pokrytie menej bežných prípadov.

Sieť Docker: premosťovacie siete

Mostné siete nechajte kontajnery bežiace na rovnakom hostiteľovi Dockeru navzájom komunikovať. Nová inštancia Dockeru má predvolenú pomenovanú sieť mostov Mosta predvolene sa k nemu pripájajú všetky novo spustené kontajnery.

The Most sieť prichádza s mnohými pohodlnými predvolenými nastaveniami, ktoré však môžu vyžadovať jemné doladenie výroby. Napríklad kontajnery na Most automaticky mať všetky porty navzájom vystavené, žiadny však vonkajšiemu svetu. To je užitočné, keď potrebujete otestovať komunikáciu medzi kontajnermi, ale nie pre nasadenie živej služby.

Najlepšie výsledky dosiahnete, ak si vytvoríte vlastnú sieť mostov. Užívateľom definované mosty majú mnoho funkcií Most most:

  • Rozlíšenie DNS funguje automaticky medzi kontajnermi na vlastnom moste. Týmto spôsobom nemusíte na komunikáciu medzi nimi používať nespracované adresy IP, ako to robíte na serveri Most Most. Kontajnery môžu vyhľadať ďalšie kontajnery pomocou DNS pomocou názvu kontajnera.
  • Kontajnery je možné pridávať a odstraňovať z vlastného mosta, keď je v prevádzke.
  • Premenné prostredia je možné zdieľať medzi kontajnermi na vlastnom moste.

Stručne povedané, s kontajnermi môžete začať manipulovať pomocou predvoleného mostíka, ale pre každú serióznu produkčnú prácu budete chcieť vytvoriť vlastný most.

Sieť Docker: prekrývajúce siete

Prepojovacie siete sú pre kontajnery na rovnakom hostiteľovi. Prekrytie siete sú pre kontajnery bežiace na rôznych hostiteľoch, napríklad v roji Dockera. To umožňuje, aby sa kontajnery medzi hostiteľmi našli navzájom a komunikovali bez toho, aby ste sa museli starať o to, ako to nastaviť pre každý jednotlivý zúčastnený kontajner.

Orchesterátor rojového režimu Dockera automaticky vytvorí prekrývajúcu sieť, vniknutie. V predvolenom nastavení sa všetky služby v roji pripájajú k vniknutie. Ale ako pri predvolenom nastavení Most, toto nie je najlepšia voľba pre produkčný systém, pretože predvolené nastavenia nemusia byť vhodné. Najlepšie urobíte, ak si vytvoríte vlastnú sieť prekrytia, či už s rojom alebo bez neho, a podľa potreby k nej pripájate uzly.

Ak chcete použiť sieť prekrytia s kontajnermi, ktoré nie sú spustené v roji, je to ďalší prípad použitia na vytvorenie vlastnej siete prekrytia. Upozorňujeme, že každý hostiteľ Dockeru v prekrývacej sieti musí mať správne porty otvorené pre svojich kolegov, aby ich bolo možné vidieť, a bez režimu roja potrebuje každý uzol prístup k nejakému úložisku kľúčov a hodnôt.

Upozorňujeme, že prekrývacie siete predvolene povoľujú iba 256 odlišných adries IP. Tento limit môžete zvýšiť, ale Docker odporúča namiesto toho použiť viac prekrytí.

Sieť Docker: hostiteľská sieť

The hostiteľ sieťový ovládač umožňuje kontajnerom, aby ich sieťové zásobníky bežali vedľa seba so zásobníkom na hostiteľovi. Webový server na porte 80 v a hostiteľ-sieťový kontajner je k dispozícii z portu 80 na samotnom hostiteľovi.

Najväčším prínosom pre hostiteľské siete je rýchlosť. Ak potrebujete poskytnúť prístup k portu kontajnera a chcete ho čo najbližšie k základnému operačnému systému, toto je spôsob, ako ísť. Ale stojí to za cenu flexibility: Ak mapujete port 80 na kontajner, žiadny iný kontajner ho na danom hostiteľovi nemôže použiť.

Sieť Docker: sieť Macvlan

Sieť Macvlan je určená pre aplikácie, ktoré pracujú priamo so základnou fyzickou sieťou, ako sú napríklad aplikácie na sledovanie sieťového prenosu. The macvlan vodič nepriradí kontajneru iba adresu IP, ale aj fyzickú adresu MAC.

Upozorňujeme, že tento typ sietí Docker má veľa rovnakých upozornení, aké by ste mali, keby ste napríklad vytvorili virtuálne adresy MAC pomocou virtuálnych počítačov. Stručne povedané, Macvlan by mal byť vyhradený iba pre aplikácie, ktoré nefungujú, pokiaľ sa nespoliehajú na fyzickú sieťovú adresu.

Docker networking: vytváranie a správa sietí

Celá správa sietí v Dockeri sa vykonáva pomocou dokovacia sieť príkaz. Mnoho jeho čiastkových príkazov je podobných ako iné príkazy Dockeru; napríklad, docker network ls zobrazí všetky nakonfigurované siete v aktuálnej inštancii Dockeru:

$ docker network ls ID SIETE NÁZOV ROZSAH OVLÁDAČA 2e0adaa0ce4a most mosta lokálne 0de3da43b973 hostiteľ hostiteľ lokálne 724a28c6d86d žiadny null lokálny

Na vytvorenie siete použite vytvoriť čiastkový príkaz spolu s - vodič vlajka označujúca, ktorý vodič sa má použiť (most, prekrytie, macvlan):

$ docker network create --driver bridge my-bridge 

Kontajnery hostené v sieti nevyžadujú vytvorenie siete pre ne. Namiesto toho spustite kontajner s - hostiteľ siete vlajka. Všetky procesy v kontajneri počúvajú na ich predkonfigurovaných portoch, preto sa uistite, že sú nastavené ako prvé.

Medzi možnosti vytvorenia siete patrí aj špecifikácia jej podsiete, rozsahu adries IP a sieťovej brány, podobne ako by to bolo v prípade vytvorenia siete pomocou iných prostriedkov.

Kontajnery sú v predvolenom nastavení spustené na serveri Most sieť. Ak chcete použiť konkrétnu sieť, použite --sieť príznak pri spustení kontajnera a zadajte názov siete.

Môžete tiež spárovať bežiaci kontajner so sieťou:

$ docker network connect bridge my_container

To sa pripájamy_container do Most pri zachovaní všetkých existujúcich sieťových pripojení, ktoré už má.

Po roztočení kontajnera zostanú všetky súvisiace siete neporušené. Ak chcete siete odstrániť manuálne, môžete tak urobiť pomocou docket network rm príkaz alebo použiť docker network prun na odstránenie všetkých sietí, ktoré sa na hostiteľovi už nepoužívajú.

Siete Docker a Kubernetes

Ak hľadáte riešenie Kubernetes ako orchestračné riešenie, ale už máte dosť práce zapracovanej do nastavenia siete Docker, nebudete nadšení, keď počujete, že neexistuje vzájomná korešpondencia medzi tým, ako Docker a Kubernetes pracujú so sieťami.

Podrobnosti sú opísané v dokumentácii Kubernetes, ale krátka verzia je, že majú zásadne odlišné modely spôsobu alokácie a správy sieťových prostriedkov. Preto budete musieť pre svoju aplikáciu navrhnúť sieťové nastavenie špecifické pre Kubernetes.

Jedným z možných prístupov na polceste je použitie doplnku Kubernetes Container Network Interface (CNI), ktorý pracuje s vlastnými sieťovými ovládacími prvkami Dockeru. Ale toto je prinajlepšom dočasné riešenie; v určitom okamihu budete musieť budovať svoje projekty Kubernetes pomocou vlastných sieťových metafor zvnútra.