Programmering

Docker-opplæring: Kom i gang med Docker-nettverk

En vanlig brukstilfelle for Docker er nettverkstjenester, og Docker har sin egen nettverksmodell for å la containere snakke med hverandre og omverdenen.

Opprinnelig måtte Docker-containere kobles sammen for hånd eller eksponeres manuelt for omverdenen. Den nåværende nettverksmodellen lar containere finne hverandre automatisk på samme vert (eller på tvers av forskjellige verter), og bli eksponert for verden generelt på en mer kontrollert måte.

Det er fire grunnleggende måter Docker forsyner utviklere med nettverk for containere. De to første, bro og overlegg nettverk, dekker de vanligste brukssakene i produksjonen. De to andre, vert og Macvlan nettverk, eksisterer for å dekke mindre vanlige tilfeller.

Docker-nettverk: Bridge-nettverk

Bridge-nettverk la containere som kjører på samme Docker-vert kommunisere med hverandre. En ny forekomst av Docker kommer med et standard bridge-nettverk bro, og som standard kobles alle nystartede containere til den.

De bro nettverket kommer med mange praktiske standardinnstillinger, men de trenger kanskje finjustering i produksjonen. For eksempel containere på bro automatisk har alle porter eksponert for hverandre, men ingen for omverdenen. Det er nyttig når du trenger å teste kommunikasjonen mellom containere, men ikke for å distribuere en live-tjeneste.

For best resultat, opprett ditt eget bridgenettverk. Brukerdefinerte broer har mange funksjoner bro broen gjør ikke:

  • DNS-oppløsning fungerer automatisk mellom containere på en tilpasset bro. På denne måten trenger du ikke bruke rå IP-adresser for å kommunisere mellom dem som du gjør på bro bro. Containere kan finne andre containere via DNS ved hjelp av containernavnet.
  • Beholdere kan legges til og fjernes fra en tilpasset bro mens de kjører.
  • Miljøvariabler kan deles mellom containere på en tilpasset bro.

Kort sagt, du kan begynne å fikle med containere ved hjelp av standardbroen, men for seriøst produksjonsarbeid vil du lage en tilpasset bro.

Docker-nettverk: Overleggsnettverk

Bridge-nettverk er for containere på samme vert. Overlegg nettverk er for containere som kjører på forskjellige verter, for eksempel de som er i en Docker-sverm. Dette lar containere på tvers av vertene finne hverandre og kommunisere, uten at du trenger å bekymre deg for hvordan du konfigurerer det for hver enkelt container som deltar.

Docker's orkestrator for svermmodus oppretter automatisk et overleggsnettverk, inngang. Som standard knytter alle tjenester på svermen seg til inngang. Men som med standard bro, dette er ikke det beste valget for et produksjonssystem, fordi standardinnstillingene kanskje ikke er passende. Det beste alternativet er å opprette et tilpasset overleggsnettverk, med eller uten sverm, og feste noder til det etter behov.

Hvis du vil bruke et overleggsnettverk med containere som ikke kjører i en sverm, er det en annen brukssak for å opprette et tilpasset overleggsnettverk. Merk at hver Docker-vert i et overleggsnettverk må ha de riktige portene åpne for sine jevnaldrende for å bli sett, og uten svermmodus trenger hver node tilgang til en nøkkelverdilager av noe slag.

Vær også oppmerksom på at overleggsnettverk som standard bare tillater 256 forskjellige IP-adresser. Du kan øke denne grensen, men Docker anbefaler å bruke flere overlegg i stedet.

Docker-nettverk: Vertsnettverk

De vert nettverksdriver lar containere ha sine nettverksstabler side om side med stakken på verten. En webserver på port 80 i a vert-networked container er tilgjengelig fra port 80 på selve verten.

Den største velsignelsen med vertsnettverk er hastighet. Hvis du trenger å gi en containerport tilgang, og du vil gjøre det så nær det underliggende operativsystemet som mulig, er dette veien å gå. Men det koster fleksibilitet: Hvis du tilordner port 80 til en container, kan ingen andre containere bruke den på den verten.

Docker-nettverk: Macvlan-nettverk

Et Macvlan-nettverk er for applikasjoner som fungerer direkte med det underliggende fysiske nettverket, for eksempel applikasjoner for overvåking av nettverkstrafikk. De macvlan driveren tildeler ikke bare en IP-adresse til en container, men også en fysisk MAC-adresse.

Vær oppmerksom på at denne typen Docker-nettverk kommer med mange av de samme advarslene du ville hatt hvis du for eksempel opprettet virtuelle MAC-adresser ved hjelp av virtuelle maskiner. Kort sagt, Macvlan bør bare reserveres for applikasjoner som ikke fungerer med mindre de er avhengige av en fysisk nettverksadresse.

Docker-nettverk: Opprette og administrere nettverk

All nettverksadministrasjon i Docker gjøres ved hjelp av dockernettverk kommando. Mange av underkommandoene ligner på andre Docker-kommandoer; for eksempel, docker-nettverk ls viser alle de konfigurerte nettverkene i den nåværende Docker-forekomsten:

$ docker-nettverk ls NETTVERK ID NAVN DRIVER OMfang 2e0adaa0ce4a bridge bridge lokal 0de3da43b973 vert vert lokal 724a28c6d86d ingen null lokal

For å opprette et nettverk, bruk skape underkommando sammen med --sjåfør flagg for å indikere hvilken driver som skal brukes (bro, overlegg, macvlan):

$ docker-nettverk oppretter - driver bridge my-bridge 

Vertsnettverkede containere krever ikke at det opprettes et nettverk for dem. I stedet lanserer du containeren med - nettverks vert flagg. Eventuelle prosesser på beholderen lytter til deres forhåndskonfigurerte porter, så sørg for at de er satt først.

Alternativene for å opprette et nettverk inkluderer også å spesifisere subnett, IP-adresseområde og nettverksport, omtrent som det ville være tilfelle for å opprette et nettverk på andre måter.

Beholdere kjøres som standard på bro Nettverk. For å bruke et bestemt nettverk, bruk bare --Nettverk flagg når du starter containeren og spesifiser nettverksnavnet.

Du kan også koble en løpende container med et nettverk:

$ docker nettverk koble bro my_container

Dette fester segmin_container til bro nettverket, mens du beholder eventuelle eksisterende nettverkstilkoblinger det allerede har.

Når en container spinnes ned, blir alle nettverk som er knyttet til den, intakt. Hvis du vil fjerne nettverk manuelt, kan du gjøre det med docket nettverk rm kommando, eller bruk docker nettverk beskjæring for å fjerne alle nettverk som ikke lenger er i bruk på verten.

Docker-nettverk og Kubernetes-nettverk

Hvis du ser på Kubernetes som en orkestrasjonsløsning, men allerede har en god del arbeid nedlagt i et Docker-nettverksoppsett, vil du ikke være begeistret over å høre at det ikke er en-til-en-samsvar mellom hvordan Docker og Kubernetes håndterer nettverk.

Detaljene er beskrevet i Kubernetes-dokumentasjonen, men kortversjonen er at de har fundamentalt forskjellige modeller for hvordan nettverksressurser tildeles og administreres. Så du må lage et Kubernetes-spesifikt nettverksoppsett for applikasjonen din.

En mulig halvveis tilnærming er å bruke en Kubernetes Container Network Interface (CNI) plugin som fungerer med Docker sine egne nettverkskontroller. Men dette er i beste fall en midlertidig løsning; på et tidspunkt må du bygge Kubernetes-prosjektene dine ved hjelp av egne nettverksmetaforer fra innsiden og ut.

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