Docker-netværk - Udforsk, hvordan containere kommunikerer med hinanden

Lær alt om Docker-netværkskapaciteter med en forståelse af Container Network Model og implementering af det med en Hands-On.

I nutidens verden er virksomheder blevet ivrige efter containerisering, som kræver stærke netværksfærdigheder for korrekt at konfigurere en containerarkitektur, og dermed introducerer dette konceptet med Docker Networking.



I denne blog på Docker Networking vil du gennemgå følgende emner:



Hvad er Docker?

For at forstå Docker skal du vide om historikken om, hvordan applikationer blev implementeret før, og derefter hvordan applikationer distribueres ved hjælp af containere nu.

Implementering af applikationer på gammel måde og ny måde - Docker-netværk - Edureka



Som du kan se i ovenstående diagram, havde den gamle måde applikationer på værten.Så et antal applikationer deler de biblioteker, der findes i det operativsystem.Men med containerisering vil operativsystemet have en kerne, som er det eneste, der vil være almindeligt mellem alle applikationerne.Så applikationer kan ikke få adgang til hinandens biblioteker.

Så, Docker Enkelt sagt er en åben platform til udvikling, forsendelse og kørsel af applikationer, der gør det muligt for brugeren at adskille applikationer fra infrastrukturer ved hjælp af containere at levere software hurtigt.

Så hvordan kommunikerer disse containere med hinanden i forskellige situationer?



Nå, det kommer gennem Docker Networking.

Docker-netværk

Inden jeg dykker dybt ned i Docker Networking, lad mig vise dig Docker's workflow.

Som du kan se i ovenstående diagram. En udvikler skriver en kode, der angiver applikationskrav eller afhængigheder i en let at skrive Docker-fil, og denne Docker-fil producerer Docker-billeder. Så uanset afhængigheder, der kræves til en bestemt applikation, er til stede i dette billede.

Nu er Docker-containere intet andet end runtime-forekomsten af ​​Docker Image. Disse billeder uploades til Docker Hub (Git repository for Docker Images), som indeholder offentlige / private arkiver.

Så fra offentlige arkiver kan du også trække dit billede, og du kan uploade dine egne billeder til Docker Hub. Derefter fra Docker Hub trækker forskellige hold som kvalitetssikring eller produktionsteam dette billede og forbereder deres egne containere. Disse individuelle containere kommunikerer med hinanden via et netværk for at udføre de nødvendige handlinger, og dette er intet andet end Docker Networking.

Så du kan definere Docker Networking som en kommunikationspassage, hvorigennem alle isolerede containere kommunikerer med hinanden i forskellige situationer for at udføre de nødvendige handlinger.

Hvad synes du er målene for Docker Networking?

Mål for Docker Networking

Fleksibilitet - Docker giver fleksibilitet ved at muliggøre et vilkårligt antal applikationer på forskellige platforme til at kommunikere med hinanden.

Tværplatform - Docker kan let bruges på tværs af platforme, der fungerer på tværs af forskellige servere ved hjælp af Docker Swarm Clusters.

Skalerbarhed - Docker er et fuldt distribueret netværk, der gør det muligt for applikationer at vokse og skalere individuelt og samtidig sikre ydeevne.

Decentraliseret - Docker bruger et decentralt netværk, som gør det muligt at sprede applikationerne og være meget tilgængelige. I tilfælde af at en container eller en vært pludselig mangler i din ressourcepulje, kan du enten hente en ekstra ressource eller videregive til tjenester, der stadig er tilgængelige.

Brugervenlig - Docker gør det let at automatisere implementeringen af ​​tjenester, hvilket gør dem nemme at bruge i det daglige liv.

Support - Docker tilbyder out-of-the-box support. Så evnen til at bruge Docker Enterprise Edition og få al funktionaliteten meget let og ligetil, gør Docker-platformen til at være meget let at blive brugt.

For at aktivere ovenstående mål har du brug for noget kendt som Container Network Model.

Vil du udforske forskellige DevOps-faser?

Container Network Model (CNM)

Før jeg fortæller dig, hvad der nøjagtigt er en Container Network Model, lad mig orientere dig om Libnetwork, der er nødvendigt, før du forstår CNM.

Libnetwork er et open source Docker-bibliotek, der implementerer alle de nøglekoncepter, der udgør CNM.

Så, Container Network Model (CNM) standardiserer de nødvendige trin for at levere netværk til containere, der bruger flere netværksdrivere. CNM kræver en distribueret nøgleværdilager som konsol for at gemme netværkskonfigurationen.

CNM har grænseflader til IPAM-plugins og netværks-plugins.

IPAM-plugin-API'erne bruges til at oprette / slette adressepuljer og tildele / deallocate container-IP-adresser, mens netværksplugin-API'erne bruges til at oprette / slette netværk og tilføje / fjerne containere fra netværk.

En CNM har hovedsageligt bygget på 5 objekter: Netværkscontroller, Driver, Netværk, Slutpunkt og Sandkasse.

Containernetværksmodelobjekter

Netværkscontroller: Giver indgangspunktet i Libnetwork, der udsætter enkle API'er for Docker Engine til at allokere og administrere netværk. Da Libnetwork understøtter flere indbyggede og eksterne drivere, giver netværkscontroller brugerne mulighed for at knytte en bestemt driver til et givet netværk.

Chauffør: Ejer netværket og er ansvarlig for styring af netværket ved at have flere drivere, der deltager for at tilfredsstille forskellige brugssager og implementeringsscenarier.

Netværk: Giver forbindelse mellem en gruppe slutpunkter, der hører til det samme netværk og isoleres fra resten. Så når et netværk oprettes eller opdateres, får den tilsvarende driver besked om begivenheden.

Slutpunkt: Giver forbindelse til tjenester eksponeret af en container i et netværk med andre tjenester leveret af andre containere i netværket. Et slutpunkt repræsenterer en tjeneste og ikke nødvendigvis en bestemt container, Endpoint har også et globalt omfang inden for en klynge.

Sandkasse: Oprettet, når brugere anmoder om at oprette et slutpunkt på et netværk. En sandkasse kan have flere slutpunkter knyttet til forskellige netværk, der repræsenterer containerens netværkskonfiguration, såsom IP-adresse, MAC-adresse, ruter, DNS.

Så det var de 5 vigtigste objekter i CNM.

Lad mig nu fortælle dig de forskellige netværksdrivere, der er involveret i Docker-netværk.

Vil du tage DevOps-læring til et næste niveau?

Netværksdrivere

Der er hovedsageligt 5 netværksdrivere: Bridge, Host, None, Overlay, Macvlan

Bro: Bridge-netværket er et privat internt standardnetværk oprettet af docker på værten. Så alle containere får en intern IP-adresse, og disse containere kan få adgang til hinanden ved hjælp af denne interne IP. Bridge-netværkene bruges normalt, når dine applikationer kører i enkeltstående containere, der har brug for at kommunikere.

Vært : Denne driver fjerner netværksisolationen mellem docker-værten og docker-containerne for at bruge værtens netværk direkte. Så med dette vil du ikke kunne køre flere webcontainere på den samme vært på den samme port, som porten nu er fælles for alle containere i værtsnetværket.

Ingen : I denne type netværk er containere ikke knyttet til noget netværk og har ikke adgang til det eksterne netværk eller andre containere. Så dette netværk bruges nårdu vil deaktivere netværksstakken på en container fuldstændigt, ogkun oprette en loopback-enhed.

Overlay : Opretter et internt privat netværk, der spænder over alle de noder, der deltager i sværmklyngen. Så overlay-netværk letter kommunikationen mellem en sværmetjeneste og en enkeltstående container eller mellem to enkeltstående containere på forskellige Docker-dæmoner.

Macvlan: Giver dig mulighed for at tildele en MAC-adresse til en container, så den vises som en fysisk enhed på dit netværk. Derefter dirigerer Docker-dæmonen trafik til containere efter deres MAC-adresser. Macvlan-driveren er det bedste valg, når du forventes at være direkte forbundet til det fysiske netværk i stedet for at blive dirigeret gennem Docker-værts netværksstak.

Okay, så det var al teorien, der kræves for at forstå Docker Networking. Lad mig nu gå videre og vise dig praktisk hvordan netværkene oprettes og containere kommunikerer med hinanden.

Praktisk erfaring

Så med en antagelse om, at I alle har installeret Docker på jeres systemer, har jeg et scenarie at fremvise.

Antag at du vil gemme kursusnavn og kursus-id, som du skal bruge en webapplikation til. Dybest set har du brug for en container til webapplikation, og du har brug for en container til som MySQL til backend, at MySQL-containeren skal linkes til webapplikationscontaineren.

Hvad med at jeg udfører ovennævnte eksempel praktisk.

Involverede trin:

  • Initialiser Docker Swarm for at danne en Swarm-klynge.
  • Opret et overlay-netværk
  • Opret tjenester til både webapplikation og MySQL
  • Forbind applikationerne via netværket

Lad os komme igang!

Trin 1: Initialiser Docker Swarm på maskinen.

docker sværm init - advertise-addr 192.168.56.101

Flagget –advertise-addr konfigurerer managernoden til at offentliggøre sin adresse som 192.168.56.101. De andre knudepunkter i sværmen skal kunne få adgang til manager på IP-adressen.

Trin 2: Hvis du nu vil slutte dig til denne managerknude til arbejdsknudepunktet, skal du kopiere det link, du får, når du initialiserer sværm på arbejdsknudepunktet.
Trin 3: Opret et overlay-netværk.

docker-netværk opretter -d overlay myoverlaynetwork

Hvor myoverlay er netværksnavnet og -d gør det muligt for Docker Daemon at køre i baggrunden.

Trin 4.1: Opret en service-webapp1, og brug det netværk, du har oprettet, til at distribuere denne service over sværmklyngen.

docker-tjeneste opretter --navn webapp1 -d --netværk myoverlaynetwork -p 8001: 80 hshar / webapp

Hvor -per til videresendelse af havne,hsharer kontonavnet på Docker Hub, og webapp er navnet på den webapplikation, der allerede findes på Docker Hub.

Trin 4.2: Kontroller nu, om tjenesten er oprettet eller ej.

marionet vs kok vs docker
docker service ls

Trin 5.1: Opret nu en MySQL-tjeneste og brug det netværk, du har oprettet, til at distribuere tjenesten over sværmklyngen.

docker-tjeneste opretter --navn mysql -d --netværk myoverlaynetwork -p 3306: 3306 hshar / mysql: 5.5


Trin 5.2: Kontroller nu, om tjenesten er oprettet eller ej.

docker service ls

Trin 6.1: Derefter skal du kontrollere, hvilken container der kører på din masternode og gå ind i hshar / webapp-containeren.

docker ps

Trin 6.2: Så du kan se, at kun webapp-tjenesten findes på managerenoden. Så kom ind i webapp-containeren.

docker exec -it container_id bash nano var / www / html / index.php

Docker ps-kommandoen viser begge dine containere med deres respektive container-id. Den anden kommando aktiverer beholderen i en interaktiv tilstand.

Trin 7: Nu skal du ændre $ servername fra localhost til mysql og $ password fra '' 'til' edureka ', og også ændre alle udfylde de nødvendige databaseoplysninger og gem din index.php-fil ved hjælp af tastaturgenvejen Ctrl + x og derefter y for at gemme, og tryk på enter.

Trin 8: Gå nu ind i mysql-containeren, der kører på en anden node.

docker exec -it container_id bash

Trin 9: Når du er gået ind i mysql-containeren, skal du indtaste nedenstående kommandoer for at bruge databasen i MySQL.

Trin 9.1: Få adgang til at bruge mysql-containeren.

mysql -u root -pedureka

Hvor -u repræsenterer brugeren, og -p er adgangskoden til din maskine.

Trin 9.2: Opret en database i mysql, som bruges til at hente data fra webapp1.

Opret DATABASE HandsOn

Trin 9.3: Brug den oprettede database.

BRUG HandsOn

Trin 9.4: Opret en tabel i denne database, som skal bruges til at hente data fra webapp1.

OPRET TABEL kursusdetaljer (kursusnavn VARCHAR (10), kursusid VARCHAR (11))

Trin 9.5: Afslut nu også MySQL og container ved hjælp af kommandoen Afslut .

Trin 10: Gå til din browser og indtast adressen som localhost: 8001 / index.php . Dette åbner din webapplikation. Indtast nu detaljerne i kurserne, og klik på Send forespørgsel .

Trin 11: Når du klikker på Send forespørgsel, skal du gå til den node, hvor din MySQL-tjeneste kører, og gå derefter ind i containeren.

docker exec -it container_id bash mysql -u root -pedureka BRUG HandsOn SHOW-tabeller vælg * fra kursus_detaljer

Dette viser dig output fra alle baner, som du har udfyldt detaljerne for.

Her slutter jeg min Docker Networking-blog. Jeg håber, du har nydt dette indlæg. Du kan tjekke andre blogs også i serien, der beskæftiger sig med det grundlæggende i Docker.

Hvis du fandt denne Docker Container-blog relevant, skal du tjekke af Edureka, et betroet online læringsfirma med et netværk på mere end 450.000 tilfredse elever spredt over hele kloden. Edureka DevOps-certificeringstræningskurset hjælper eleverne med at få ekspertise i forskellige DevOps-processer og -værktøjer såsom Puppet, Jenkins, Docker, Nagios, Ansible og GIT til automatisering af flere trin i SDLC.

Leder du efter certificering i DevOps?

Har du et spørgsmål til mig? Nævn det i kommentarfeltet, og jeg vender tilbage til dig.