Pogosti primeri uporabe Dockerja so omrežne storitve, Docker pa ima lasten mrežni model, s katerim lahko vsebniki govorijo med seboj in z zunanjim svetom.
Prvotno so morali biti zabojniki Docker ročno povezani v mrežo ali ročno izpostavljeni zunanjemu svetu. Trenutni mrežni model omogoča vsebnikom, da se samodejno najdejo na istem gostitelju (ali med različnimi gostitelji) in so bolj nadzorovano izpostavljeni svetu.
Obstajajo štirje osnovni načini, kako Docker razvijalce oskrbi z omrežjem za zabojnike. Prva dva, mostu in prekrivanje omrežja, pokrivajo najpogostejše primere uporabe v proizvodnji. Druga dva, gostitelj in Macvlan omrežja obstajajo za pokrivanje manj pogostih primerov.
Dockerjevo mreženje: mostna omrežja
Premostitvena omrežja naj vsebniki, ki se izvajajo na istem gostitelju Docker, komunicirajo med seboj. Nov primerek Dockerja ima privzeto mostno omrežje z imenom mostu
in privzeto se nanjo povežejo vsi na novo zagnani vsebniki.
The mostu
omrežje je opremljeno s številnimi priročnimi privzetimi privzetimi nastavitvami, vendar jih bo morda treba natančno nastaviti v proizvodnji. Na primer zabojniki na mostu
samodejno izpostavijo vsa vrata druga drugemu, nobena pa zunanjemu svetu. To je koristno, kadar morate preizkusiti komunikacijo med vsebniki, ne pa tudi za uvedbo storitve v živo.
Za najboljše rezultate ustvarite lastno omrežje za premostitev. Uporabniško določeni mostovi imajo veliko funkcij mostu
most ne:
- Ločljivost DNS deluje samodejno med vsebniki na mostu po meri. Tako vam za komunikacijo med njimi ni treba uporabljati surovih naslovov IP, kot na spletnem mestu
mostu
most. Vsebniki lahko poiščejo druge vsebnike prek DNS z uporabo imena vsebnika. - Med izvajanjem je mogoče vsebnike dodati in odstraniti z mostu po meri.
- Spremenljivke okolja lahko delite med vsebniki na mostu po meri.
Skratka, lahko začnete izdelovati kontejnerje z uporabo privzetega mostu, toda za vsa resna produkcijska dela boste želeli ustvariti most po meri.
Dockerjevo omrežje: prekrivna omrežja
Premostitvena omrežja so namenjena zabojnikom na istem gostitelju. Prekrivanje omrežja so namenjena zabojnikom, ki se izvajajo na različnih gostiteljih, na primer v Dockerjevem roju. Tako lahko vsebniki med gostitelji najdejo drug drugega in komunicirajo, ne da bi vam bilo treba skrbeti, kako to nastaviti za vsak posamezen sodelujoči vsebnik.
Dockerjev orkestrator načina rojenja samodejno ustvari prekrivno omrežje, vdor
. Privzeto se nanje priklopijo vse storitve v roju vdor
. Toda tako kot privzeto mostu
, to ni najboljša izbira za proizvodni sistem, ker privzete vrednosti morda niso ustrezne. Najbolje je, da ustvarite mrežo s prekrivanjem po meri z rojem ali brez in mu po potrebi pritrdite vozlišča.
Če želite uporabiti prekrivno omrežje s kontejnerji, ki se ne izvajajo v roju, je to še en primer uporabe za ustvarjanje prekrivnega omrežja po meri. Upoštevajte, da mora imeti vsak gostitelj Dockerja v prekrivnem omrežju ustrezna vrata, odprta za njihove vrstnike, in brez načina rojenja vsako vozlišče potrebuje dostop do neke vrste shrambe ključ-vrednost.
Upoštevajte tudi, da prekrivna omrežja privzeto omogočajo samo 256 različnih naslovov IP. To omejitev lahko zvišate, vendar Docker priporoča, da namesto tega uporabite več prekrivnih elementov.
Omrežje Docker: omrežje gostitelja
The gostitelj
mrežni gonilnik omogoča, da se njihovi skladi omrežja skladajo skupaj s skladom na gostitelju. Spletni strežnik na vratih 80 v gostitelj
-networked vsebnik je na voljo od vrat 80 na samem gostitelju.
Največja blaginja gostiteljskih mrež je hitrost. Če morate omogočiti dostop do vrat posode in ga želite približati osnovnemu OS, je to prava pot. Vendar gre za ceno prilagodljivosti: če vrata 80 preslikate v vsebnik, ga na tem gostitelju ne more uporabiti noben drug vsebnik.
Povezovanje Docker: mreženje Macvlan
Omrežje Macvlan je namenjeno aplikacijam, ki delujejo neposredno z osnovnim fizičnim omrežjem, na primer aplikacijami za nadzor omrežnega prometa. The macvlan
gonilnik vsebniku ne dodeli samo naslova IP, temveč tudi fizični naslov MAC.
Upoštevajte, da ima ta vrsta omrežja Docker veliko istih opozoril, ki bi jih imeli, če bi recimo ustvarjali navidezne naslove MAC z uporabo VM-jev. Skratka, Macvlan bi moral biti rezerviran samo za aplikacije, ki ne delujejo, razen če se zanašajo na fizični omrežni naslov.
Dockerjevo mreženje: Ustvarjanje in upravljanje omrežij
Vse upravljanje omrežja v Dockerju poteka z uporabo omrežje docker
ukaz. Številni podkomandi so podobni drugim ukazom Docker; na primer, docker omrežje ls
prikaže vsa konfigurirana omrežja na trenutnem primerku Dockerja:
$ docker network ls OMREŽJE ID IME DRIVER PODROČJE UPORABE 2e0adaa0ce4a most most lokalni 0de3da43b973 gostitelj gostitelj lokalni 724a28c6d86d noben null lokalni
Če želite ustvariti omrežje, uporabite ustvariti
podkomando skupaj z - voznik
zastavica, ki označuje, katerega voznika uporabiti (most, prekrivanje, macvlan
):
$ docker network create --driver bridge my-bridge
Za vsebnike, povezane z gostitelji, ni treba ustvariti omrežja zanje. Namesto tega zaženite posodo z - gostitelj omrežja
zastavo. Vsi procesi v vsebniku poslušajo vnaprej nastavljena vrata, zato poskrbite, da bodo najprej nastavljena.
Možnosti za ustvarjanje omrežja vključujejo tudi določitev njegove podomrežja, obsega naslovov IP in omrežnega prehoda, podobno kot bi to veljalo za ustvarjanje omrežja z drugimi sredstvi.
Vsebniki se privzeto zaženejo na mostu
omrežje. Če želite uporabiti določeno omrežje, preprosto uporabite --mreža
zastavico pri zagonu vsebnika in določite ime omrežja.
Tekoči vsebnik lahko tudi povežete z omrežjem:
$ docker network connect bridge my_container
To pritrjujemy_container
do mostu
omrežje, hkrati pa ohrani vse obstoječe omrežne povezave, ki jih že ima.
Ko se vsebnik zavrti, vsa omrežja, povezana z njim, ostanejo nedotaknjena. Če želite omrežja odstraniti ročno, lahko to storite z docket network rm
ukaz ali uporabite docker omrežje suhe slive
da odstranite vsa omrežja, ki se na gostitelju ne uporabljajo več.
Dockerjevo mreženje in Kubernetesovo mreženje
Če Kubernetesa opazujete kot rešitev za orkestracijo, vendar ste že vložili precej dela v omrežno nastavitev Dockerja, ne boste navdušeni, če slišite, da medsebojna povezava med Dockerjem in Kubernetesom ne obstaja.
Podrobnosti so opisane v dokumentaciji Kubernetes, kratka različica pa je, da imajo bistveno drugačne modele za dodeljevanje in upravljanje omrežnih virov. Torej boste morali za svojo aplikacijo oblikovati omrežno nastavitev, specifično za Kubernetes.
Eden od možnih pristopov na pol poti je uporaba vtičnika Kubernetes Container Network Interface (CNI), ki deluje z lastnimi omrežnimi kontrolami Dockerja. Toda to je v najboljšem primeru začasna rešitev; na neki točki boste morali svoje projekte Kubernetes graditi z lastnimi metaforami mreženja od znotraj navzven.