Docker Compose Bridge Networking

Docker Compose Bridge Networking
Docker Compose er en enkel måte å distribuere applikasjoner på flere container. Den automatiserer mye av bestillingen, nettverk og ressursstyring av applikasjoner i en enkelt pent docker-kompose.YML -fil. Du kan få appen opp ved å kjøre Docker-Compose opp og slå den ned igjen ved å bruke Docker-Compose ned.

Mye blir lagt til Docker -miljøet vårt, som blir oversett og deretter slettet med den siste kommandoen. Et av de viktigste objektene er et bronettverk. Dette er hva vi skal fokusere på. Mer presist, bro nettverk.

Docker Bridge Network

Docker har mange nettverksrelaterte drivere. To av de viktigste er bridge nettverksdriver og overlay en. Det siste brukes til Docker Swarm -modus, der containere som løper over forskjellige noder kan ha en del av enkelt abstrakt undernett. Bridge nettverk er imidlertid den som interesserer oss her.

For å lage et nytt Docker-nettverk som heter My-Network and Inspect It, Run:

$ Docker Network Create -D Bridge My -Network
$ docker inspiser mitt nettverk

Du vil se blant annet en undernettmaske og en standard gateway.

..
"Config": [

"Subnet": "172.18.0.0/16 ",
"Gateway": "172.18.0.1"

..

Enhver beholder som blir koblet til dette nettverket, vil få en IP i området fra 172.18.0.2 til 172.18.255.254. La oss prøve å lage et par containere i dette nettverket:

$ docker run -dit -name container1 -network my -network ubuntu: siste
$ docker run -dit -name container2 -network my -network ubuntu: siste

Hvis du nå kjører, inspiser mitt nettverk, vil du legge merke til at individuelle containere med riktig navn og tilsvarende IP-adresser vises i containere-feltet til JSON-utgangen.

$ docker inspiser mitt nettverk
..
"Containere":
"8CE5CD67E6AED180B5D0B6B0FCD597175D6154C9208DAA9DE304AEC94757E99B":
"Navn": "Container1",
"EndpointId": "93d020d22172d6c98a0b88e78a7a01f6d1a3d44b983e7454fba7c1f1be5fae9d",
"MacAddress": "02: 42: AC: 12: 00: 02",
"IPv4Address": "172.18.0.2/16 ",
"Ipv6address": ""
,
"AF1434DF6F86D2DF96ACA1D7348DD6C815A4989EC07FB0F3CFEA95D4A38B4F74":
"Navn": "Container2",
"EndpointId": "3A5F57639C71685A10584FD392C20ABC5AE693684860BEF486404D26B332395A",
"MacAddress": "02: 42: AC: 12: 00: 03",
"IPv4Address": "172.18.0.3/16 ",
"Ipv6address": ""

..

Hvis du oppretter et annet nettverk My-Network2, vil den ha en annen undernettmaske som 172.19.0.0/16 og containere på den vil bli isolert fra containere i andre nettverk. Så ideelt sett vil du ha ett nettverk per applikasjon, så hver app er sikker og isolert fra hverandre.

Hvordan komponer skaper et nettverk

Docker Compose forstår ideen bak løpende tjenester for en applikasjon på ett nettverk. Når du distribuerer en app ved hjelp av Docker Compose -filen, selv når det ikke er nevnt spesifikke nettverksparametere, vil Docker Compose opprette et nytt bronettverk og distribuere containeren over det nettverket.

Hvis docker-komponeringen.YML er i katalog my-app, katalogens navn vil bli brukt til å navngi nettverket så vel som containerne montert på toppen av den. For eksempel, hvis jeg oppretter en katalog:

$ mkdir my-app
$ CD my-app
$ Vim Docker-Compose.yml

Og legg til følgende innhold i Docker-Compose.YML -fil:

Versjon: '3'
tjenester:
My-nginx:
Bilde: Nginx: Siste

Legg merke til hvordan vi ikke utsatte noen porter. La oss distribuere denne appen:

$ docker -compose up -d

Dette oppretter et nytt nettverk kalt my-app_default ved hjelp av bridge nettverksdriver som vi diskuterte før.Du kan liste opp alle nettverkene på ditt personlige oppsett ved å bruke Docker Network LS og deretter velge nettverksgrensesnittet som samsvarer med katalogens navn. Når du har navnet på nettverket, kan du Docker inspisere for å se alle beholderne som er en del av det nettverket sammen med deres individuelle IP -adresser og undernettmaske.

Hvis vi oppretter en annen container, ved å bruke direkte CLI (dette anbefales ikke for bruk av virkeligheten) på dette nettverket, kan vi faktisk snakke med My-Nginx-tjenesten vår.

$ docker run -dit -name container4 -network my -app_default ubuntu: siste
$ docker exec -it container4 bash
root@a32acdf15a97:/# curl http: // my-app_my-nginx_1

Dette vil skrive ut en HTML -fil med kjente utdrag som "Welcome to Nginx" synlig i den. Nginx -webserveren er tilgjengelig fra nettverket uten at vi trenger å publisere noen porter! Enda viktigere er at du ikke engang trenger å nå den ved å bruke den private IP -en, du kan ganske enkelt ringe det med vertsnavnet (det er containernavnet som vist i Docker PS).

Når du kjører en database og kobler den til frontend, trenger du ikke å publisere databaseporten i det hele tatt. I stedet kan du nå DB fra webserveren bare ved å ringe dets forutsigbare vertsnavn. Selv når Docker Compose kjøres andre steder der og IP og undernettet nå kan avvike, vil containerne fortsatt kunne snakke med hverandre.

For å publisere en havn til omverdenen ville vi selvfølgelig skrive noe som følgende:

Versjon: '3'
tjenester:
My-nginx:
Bilde: Nginx: Siste
havn:
- “8080: 80”

Nå kan folk få tilgang til webserveren fra port 8080 på IP -en til Docker -verten din. Dette kan for eksempel være den offentlige IP -en til VPS eller bare localhost hvis du kjører Docker på skrivebordet ditt. Nok en gang, jeg legger vekt på, du trenger ikke å eksponere noen porter for databasebeholderen din, fordi webserveren kan snakke med den direkte, og dermed reduserer dette risikoen for databaser som er utsatt for Internett.

Når du tar ned søknaden din, bruker du:

$ Docker-Compose Down

Dette tilpassede bronettverket sammen med alle flyktige containere som ble opprettet og festet på toppen av det, ved hjelp av Docker-Compose.YML -fil, vil bli slettet. Forlater Docker -miljøet i en ren tilstand.

Definere ditt eget nettverk

Komponer lar deg definere din egen nettverksdefinisjon. Dette vil omfatte alternativer for subnettmaske, IPv6 -adresser, blant annet. Måten det gjøres på er at vi har et nettverk på toppnivå akkurat som tjenester eller versjon er nøkler på toppnivå. Denne nøkkelen har ingen innendring. Under nettverksnøkkelen kan vi nå definere forskjellige attributter i nettverket, for nå vil vi holde det enkelt og bare nevne at det burde bruke Bridge Driver.

Versjon: '3'
nettverk:
MY-NETWORK:
Driver: Bridge

Nå kan hver container koble til flere nettverk, så under Services -delen nevner vi dette tilpassede nettverkets navn. Nettverkstasten her forventer en liste over nettverk.

Versjon: '3'
tjenester:
My-nginx:
Bilde: Nginx: Siste
nettverk:
- My-nettverket
- noe-annet nettverk # Dette er et annet nettverk som du kanskje har opprettet.

Til slutt er rekkefølgen nettverket er definert og deretter brukt i en tjenestedefinisjon er relevant. Så hele YML -filen vil se slik ut:

Versjon: '3'
tjenester:
My-nginx:
Bilde: Nginx: Siste
nettverk:
- My-nettverket
nettverk:
MY-NETWORK:
Driver: Bridge

Mer informasjon

Mens du skriver dine egne nettverksdefinisjoner, kan det være lurt å referere til den offisielle dokumentasjonen. For et raskt blikk på toppnivånettverkets nøkkel, besøk denne lenken og for servicenivånettverkstasten Her er referansen.

Du kan også prøve å spesifisere undernett i definisjonen av øverste nivåer slik at tjenestene kan ha et forhåndsbestemt utvalg av IP -adresser.