Programmering

Docker-tutorial: Kom godt i gang med Docker-netværk

En almindelig brugssag for Docker er netværkstjenester, og Docker har sin egen netværksmodel, der lader containere tale med hinanden og omverdenen.

Oprindeligt skulle Docker-containere forbindes sammen med hånden eller eksponeres manuelt for omverdenen. Den nuværende netværksmodel lader containere finde hinanden automatisk på den samme vært (eller på tværs af forskellige værter) og blive eksponeret for verden generelt på en mere kontrolleret måde.

Der er fire grundlæggende måder, som Docker forsyner udviklere med netværk til containere. De to første, bro og overlay netværk dækker de mest almindelige brugssager i produktionen. De to andre, vært og Macvlan netværk eksisterer for at dække mindre almindelige sager.

Docker-netværk: Bridge-netværk

Bronetværk lad containere, der kører på den samme Docker-vært, kommunikere med hinanden. En ny forekomst af Docker leveres med et standard bridge-netværk med navnet bro, og som standard opretter alle nystartede containere forbindelse til den.

Det bro netværk leveres med mange praktiske standardindstillinger uden for kassen, men de har muligvis behov for finjustering i produktionen. For eksempel containere på bro har automatisk alle porte udsat for hinanden, men ingen til omverdenen. Det er nyttigt, når du har brug for at teste kommunikation mellem containere, men ikke til implementering af en live service.

For de bedste resultater skal du oprette dit eget bridge-netværk. Brugerdefinerede broer har mange funktioner bro broen gør ikke:

  • DNS-opløsning fungerer automatisk mellem containere på en brugerdefineret bro. På denne måde behøver du ikke bruge rå IP-adresser til at kommunikere mellem dem, som du gør på bro bro. Containere kan finde andre containere via DNS ved hjælp af containernavnet.
  • Containere kan tilføjes og fjernes fra en brugerdefineret bro, mens de kører.
  • Miljøvariabler kan deles mellem containere på en brugerdefineret bro.

Kort sagt kan du begynde at tinkere med containere ved hjælp af standardbroen, men for ethvert seriøst produktionsarbejde vil du oprette en brugerdefineret bro.

Docker-netværk: Overlay-netværk

Bridge-netværk er til containere på samme vært. Overlay netværk er til containere, der kører på forskellige værter, såsom dem i en Docker-sværm. Dette gør det muligt for containere på tværs af værter at finde hinanden og kommunikere uden at du behøver at bekymre dig om, hvordan du konfigurerer det til hver enkelt deltagende container.

Docker's orkestrator i sværmtilstand opretter automatisk et overlay-netværk, indtrængen. Som standard knytter alle tjenester på sværmen sig til indtrængen. Men som med standard bro, dette er ikke det bedste valg for et produktionssystem, fordi standardindstillingerne muligvis ikke er passende. Din bedste chance er at oprette et brugerdefineret overlay-netværk med eller uden en sværm og vedhæfte noder til det efter behov.

Hvis du vil bruge et overlay-netværk med containere, der ikke kører i en sværm, er det en anden brugssag til oprettelse af et brugerdefineret overlay-netværk. Bemærk, at hver Docker-vært på et overlay-netværk skal have de rigtige porte, der er åbne for sine jævnaldrende, for at de kan ses, og uden sværmtilstand har hver node brug for adgang til en nøgleværdilager af en slags.

Bemærk også, at overlay-netværk som standard kun tillader 256 forskellige IP-adresser. Du kan hæve denne grænse, men Docker anbefaler at bruge flere overlays i stedet.

Docker-netværk: Værtsnetværk

Det vært netværksdriver lader containere have deres netværksstakke kørt side om side med stakken på værten. En webserver på port 80 i en vært-netværk container er tilgængelig fra port 80 på selve værten.

Den største velsignelse ved værtsnetværk er hastighed. Hvis du har brug for at give en containerportadgang, og du vil gøre det så tæt på det underliggende operativsystem som muligt, er dette vejen at gå. Men det koster fleksibilitet: Hvis du kortlægger port 80 til en container, kan ingen anden container bruge den på den vært.

Docker-netværk: Macvlan-netværk

Et Macvlan-netværk er til applikationer, der arbejder direkte med det underliggende fysiske netværk, f.eks. Applikationer til overvågning af netværkstrafik. Det macvlan driver tildeler ikke bare en IP-adresse til en container, men også en fysisk MAC-adresse.

Bemærk, at denne type Docker-netværk kommer med mange af de samme forbehold, som du ville have, hvis du f.eks. Oprettede virtuelle MAC-adresser ved hjælp af virtuelle computere. Kort sagt, Macvlan skal kun reserveres til applikationer, der ikke fungerer, medmindre de er afhængige af en fysisk netværksadresse.

Docker-netværk: Oprettelse og styring af netværk

Al netværksadministration i Docker udføres ved hjælp af docker-netværk kommando. Mange af dets underkommandoer ligner andre Docker-kommandoer; for eksempel, docker-netværk ls viser alle de konfigurerede netværk på den aktuelle Docker-forekomst:

$ docker netværk ls NETVÆRK ID NAVN DRIVER OMFANG 2e0adaa0ce4a bridge bridge lokal 0de3da43b973 vært vært lokal 724a28c6d86d ingen null lokal

For at oprette et netværk skal du bruge skab underkommando sammen med --chauffør flag for at angive, hvilken driver der skal bruges (bro, overlay, macvlan):

$ docker-netværk opretter - driver bridge my-bridge 

Containere med værtsnetværk kræver ikke, at der oprettes et netværk til dem. I stedet skal du starte containeren med --netværk vært flag. Alle processer på containeren lytter til deres forudkonfigurerede porte, så sørg for at de er indstillet først.

Indstillingerne til oprettelse af et netværk inkluderer også specificering af dets undernet, IP-adresseområde og netværksgateway, ligesom det ville være tilfældet for oprettelse af et netværk på andre måder.

Containere køres som standard på bro netværk. For at bruge et bestemt netværk skal du bare bruge --netværk flag, når du starter containeren, og angiv netværksnavnet.

Du kan også parre en kørende container med et netværk:

$ docker netværksforbind bro my_container

Dette vedhæftesmin_container til bro netværk, mens de eksisterende netværksforbindelser bevares, som det allerede har.

Når en container centrifugeres, forbliver alle tilknyttede netværk intakte. Hvis du vil fjerne netværk manuelt, kan du gøre det med docket netværk rm kommando eller brug docker-netværksbeskæring for at fjerne alle netværk, der ikke længere er i brug på værten.

Docker-netværk og Kubernetes-netværk

Hvis du ser på Kubernetes som en orkestrationsløsning, men allerede har en hel del arbejde nedlagt i en Docker-netværksopsætning, vil du ikke være begejstret over at høre, at der ikke er en-til-en-korrespondance mellem, hvordan Docker og Kubernetes håndterer netværk.

Detaljerne er beskrevet i Kubernetes-dokumentationen, men den korte version er, at de har fundamentalt forskellige modeller for, hvordan netværksressourcer fordeles og styres. Så du bliver nødt til at udarbejde en Kubernetes-specifik netværksopsætning til din applikation.

En mulig halvvejs tilgang er at bruge et Kubernetes Container Network Interface (CNI) plugin, der fungerer med Docker's egne netværkskontroller. Men dette er i bedste fald en midlertidig løsning; på et eller andet tidspunkt bliver du nødt til at opbygge dine Kubernetes-projekter ved hjælp af sine egne netværksmetaforer indefra og ud.