Vodič za Docker: započnite s Dockerovim umrežavanjem

Uobičajeni slučaj upotrebe Dockera su mrežne usluge, a Docker ima vlastiti mrežni model koji omogućuje kontejnerima da razgovaraju jedni s drugima i s vanjskim svijetom.

Izvorno, Dockerovi kontejneri morali su biti povezani ručno ili ručno izloženi vanjskom svijetu. Trenutni model umrežavanja omogućuje spremnicima da se automatski pronalaze na istom hostu (ili na različitim hostovima) i da budu izloženiji svijetu na kontroliraniji način.

Postoje četiri osnovna načina na koje Docker pruža programerima umrežavanje kontejnera. Prve dvije, most i overlay mreže pokrivaju najčešće slučajeve uporabe u proizvodnji. Druge dvije, host i Macvlan mreže, postoje kako bi pokrivale rjeđe slučajeve.

Docker umrežavanje: Bridge mreže

Mostovne mreže omogućuju međusobnu komunikaciju spremnika koji rade na istom Dockerovom hostu. Nova instanca Dockera dolazi sa zadanom mostnom mrežom koja se zove bridgei po zadanom se na nju povezuju svi novopokrenuti spremnici.

bridgeMreže dolazi s mnogim zgodan out-of-the-box zadane, ali možda treba fino ugađanje u proizvodnji. Na primjer, spremnici bridgeautomatski imaju sve luke izložene jedna drugoj, ali nijednu prema vanjskom svijetu. To je korisno kada trebate testirati komunikaciju između spremnika, ali ne i za postavljanje usluge uživo.

Za najbolje rezultate stvorite vlastitu mrežu mostova. Korisnički definirani mostovi imaju mnoge značajke koje bridgemost ne:

  • DNS rezolucija automatski radi između spremnika na prilagođenom mostu. Na taj način ne trebate koristiti neobrađene IP adrese za međusobnu komunikaciju kao na bridgemostu. Spremnici mogu locirati druge spremnike putem DNS-a pomoću naziva spremnika.
  • Spremnici se mogu dodavati i uklanjati s prilagođenog mosta dok su pokrenuti.
  • Varijable okruženja mogu se dijeliti između spremnika na prilagođenom mostu.

Ukratko, možete se baviti kontejnerima pomoću zadanog mosta, ali za bilo kakav ozbiljan proizvodni posao morat ćete stvoriti prilagođeni most.

Docker umrežavanje: Preklapajuće mreže

Mrežne mreže su za spremnike na istom hostu. Prekrivne mreže su za spremnike koji se izvode na različitim hostovima, poput onih u Dockerovom roju. To omogućuje spremnicima među domaćinima da se pronađu i komuniciraju, bez potrebe da se brinete kako to postaviti za svaki pojedini spremnik koji sudjeluje.

Lučki radnik je roj način Orkestratorica automatski stvara overlay mreže, ingress. Prema zadanim postavkama, sve usluge na roju se pridaju ingress. Ali kao i kod zadanog bridge, ovo nije najbolji izbor za proizvodni sustav jer zadane vrijednosti možda nisu prikladne. Najbolje je stvoriti prilagođenu mrežu s preklapanjem, sa ili bez roja, i po potrebi joj priključiti čvorove.

Ako želite koristiti preklapajuću mrežu s spremnicima koji se ne izvode u roju, to je još jedan slučaj upotrebe za stvaranje prilagođene prekrivne mreže. Imajte na umu da svaki Docker-ov domaćin na preklapajućoj mreži mora imati odgovarajuće priključke otvorene za svoje vršnjake kako bi se vidjeli, a bez načina rojenja svaki čvor treba pristup nekoj vrsti spremišta ključ / vrijednost.

Također imajte na umu da prekrivajuće mreže prema zadanim postavkama dopuštaju samo 256 različitih IP adresa. Možete povećati ovo ograničenje, ali Docker preporučuje upotrebu višestrukih slojeva.

Docker umrežavanje: umrežavanje domaćina

hostUmrežavanje vozač omogućuje spremnici imaju svoje mreže hrpe trčanje uz bok dimnjaka na domaćina. Web poslužitelj na portu 80 u hostumreženom spremniku dostupan je s porta 80 na samom hostu.

Najveća blagodat umrežavanja domaćina je brzina. Ako trebate omogućiti pristup priključku kontejnera i želite ga učiniti što bližim osnovnom OS-u, to je pravi put. Ali to dolazi po cijenu fleksibilnosti: ako mapirate port 80 na spremnik, nijedan drugi spremnik ne može ga koristiti na tom hostu.

Docker umrežavanje: Macvlan umrežavanje

Macvlan mreža namijenjena je aplikacijama koje izravno rade s osnovnom fizičkom mrežom, poput aplikacija za nadzor mrežnog prometa. macvlanVozač ne samo dodijeliti IP adresu na kontejner, nego fizičku MAC adresu, kao dobro.

Imajte na umu da ova vrsta Docker umrežavanja dolazi s mnogim istim upozorenjima koja biste imali kada biste, recimo, stvarali virtualne MAC adrese pomoću VM-ova. Ukratko, Macvlan bi trebao biti rezerviran samo za programe koji ne rade ako se ne oslanjaju na fizičku mrežnu adresu.

Docker umrežavanje: Stvaranje i upravljanje mrežama

Sve upravljanje mrežom u Dockeru vrši se pomoću docker networknaredbe. Mnoge su njegove podnaredbe slične ostalim Dockerovim naredbama; na primjer, docker network lsprikazuje sve konfigurirane mreže na trenutnoj Docker-ovoj instanci:

$ docker network ls MREŽA ID NAZIV OBIM VOZAČA 2e0adaa0ce4a most most lokalni 0de3da43b973 host domaćin lokalni 724a28c6d86d nema null lokalni

Da biste stvorili mrežu, upotrijebite createpotkomandu zajedno sa --driverzastavicom kako biste naznačili koji upravljački program koristiti ( bridge, overlay, macvlan):

$ docker network create --driver bridge my-bridge 

Kontejneri povezani s hostom ne zahtijevaju stvaranje mreže za njih. Umjesto toga, pokrenite spremnik s --network hostzastavicom. Svi procesi na spremniku preslušavaju svoje unaprijed konfigurirane priključke, zato provjerite jesu li oni prvo postavljeni.

Opcije za stvaranje mreže također uključuju specificiranje podmreže, raspona IP adresa i mrežnog prolaza, kao što bi to bio slučaj za stvaranje mreže korištenjem drugih sredstava.

Spremnici se na bridgemreži rade prema zadanim postavkama . Da biste koristili određenu mrežu, samo upotrijebite --networkzastavicu pri pokretanju spremnika i navedite naziv mreže.

Također možete upariti pokrenut spremnik s mrežom:

$ docker network connect bridge moj_kontejner

To se spaja  my_containerna bridgemrežu, uz očuvanje svih postojećih mrežnih veza koje već ima.

Kad se kontejner zavrti, sve mreže povezane s njim ostaju netaknute. Ako želite ručno ukloniti mreže, to možete učiniti docket network rm naredbom ili upotrijebiti docker network pruneza uklanjanje svih mreža koje se više ne koriste na hostu.

Docker umrežavanje i Kubernetes umrežavanje

Ako promatrate Kubernetesa kao rješenje za orkestraciju, ali već imate priličan rad uložen u Docker mrežne postavke, nećete biti oduševljeni kada čujete da ne postoji međusobna korespondencija između načina na koji Docker i Kubernetes postupaju s umrežavanjem.

Pojedinosti su opisane u Kubernetesovoj dokumentaciji, ali kratka je verzija da imaju bitno različite modele raspoređivanja i upravljanja mrežnim resursima. Dakle, morat ćete osmisliti mrežne postavke specifične za Kubernetes za svoju aplikaciju.

Jedan od mogućih pristupa na pola puta je upotreba dodatka Kubernetes Container Network Interface (CNI) koji radi s Dockerovim vlastitim mrežnim kontrolama. Ali ovo je u najboljem slučaju privremeno rješenje; u jednom ćete trenutku trebati graditi svoje Kubernetesove projekte koristeći vlastite mrežne metafore iznutra prema van.