Docker Networking - Utforska hur behållare kommunicerar med varandra



Lär dig allt om Docker-nätverksmöjligheter med en förståelse för Container Network Model och implementera den med hands-on.

I dagens värld har företag blivit angelägna om containerisering som kräver starka nätverkskunskaper för att korrekt konfigurera en containerarkitektur, och därmed introducerar detta konceptet Docker Networking.

I den här bloggen på Docker Networking kommer du att gå igenom följande ämnen:





Vad är Docker?

För att förstå Docker måste du veta om historiken om hur applikationer distribuerades tidigare och sedan hur applikationer distribueras med hjälp av containrar nu.

Driftsättning av applikationer på gammalt och nytt sätt - Docker Networking - Edureka



Som du kan se i ovanstående diagram hade det gamla sättet applikationer på värden.Så, ett antal applikationer delar biblioteken som finns i det operativsystemet.Men med containerisering kommer operativsystemet att ha en kärna som är det enda som kommer att vara vanligt mellan alla applikationer.Så applikationer kan inte komma åt varandras bibliotek.

Så, Hamnarbetare i enkla termer är en öppen plattform för att utveckla, leverera och köra applikationer, som gör det möjligt för användaren att separera applikationer från infrastrukturer med hjälp av behållare att leverera programvara snabbt.

Så, hur kommunicerar dessa containrar med varandra i olika situationer?



Tja, det kommer genom Docker Networking.

Docker-nätverk

Innan jag dyker in i Docker Networking, låt mig visa dig arbetsflödet för Docker.

Som du kan se i ovanstående diagram. En utvecklare skriver en kod som anger applikationskrav eller beroenden i en lättskrivbar Docker-fil och den här Docker-filen producerar Docker-bilder. Så oavsett beroenden som krävs för en viss applikation finns i den här bilden.

Nu är Docker Containers ingenting annat än körtidens instans av Docker Image. Dessa bilder laddas upp till Docker Hub (Git-arkiv för Docker-bilder) som innehåller offentliga / privata arkiv.

Så från offentliga arkiv kan du också dra din bild och du kan ladda upp dina egna bilder till Docker Hub. Sedan från Docker Hub kommer olika team som kvalitetssäkring eller produktionsteam att dra den bilden och förbereda sina egna containrar. Dessa enskilda behållare, kommunicerar med varandra via ett nätverk för att utföra de nödvändiga åtgärderna, och detta är inget annat än Docker Networking.

Så du kan definiera Docker Networking som en kommunikationspassage genom vilken alla isolerade behållare kommunicerar med varandra i olika situationer för att utföra nödvändiga åtgärder.

Vad tror du är målen för Docker Networking?

Mål för Docker Networking

Flexibilitet - Docker ger flexibilitet genom att möjliggöra valfritt antal applikationer på olika plattformar för att kommunicera med varandra.

Tvärplattform - Docker kan enkelt användas i plattformar som fungerar över olika servrar med hjälp av Docker Swarm Clusters.

Skalbarhet - Docker är ett fullt distribuerat nätverk som gör det möjligt för applikationer att växa och skala individuellt samtidigt som prestanda säkerställs.

Decentraliserad - Docker använder ett decentraliserat nätverk, vilket gör det möjligt för applikationerna att spridas och vara mycket tillgängliga. I händelse av att en container eller en värd plötsligt saknas i din resurspool kan du antingen ta upp en ytterligare resurs eller överföra till tjänster som fortfarande finns tillgängliga.

Användarvänlig - Docker gör det enkelt att automatisera distributionen av tjänster, vilket gör dem enkla att använda i det dagliga livet.

Stöd - Docker erbjuder out-of-the-box stöd. Så förmågan att använda Docker Enterprise Edition och få all funktionalitet väldigt enkelt och okomplicerat gör att Docker-plattformen är väldigt lätt att använda.

För att aktivera ovanstående mål behöver du något som kallas Container Network Model.

Vill du utforska olika DevOps-scener?

Container Network Model (CNM)

Innan jag berättar för dig vad som exakt är en Container Network Model, låt mig informera dig om Libnetwork som behövs innan du förstår CNM.

Libnetwork är ett Docker-bibliotek med öppen källkod som implementerar alla nyckelbegrepp som utgör CNM.

Så, Container Network Model (CNM) standardiserar de steg som krävs för att tillhandahålla nätverk för containrar som använder flera nätverksdrivrutiner. CNM kräver en distribuerad nyckel-värdebutik som konsol för att lagra nätverkskonfigurationen.

CNM har gränssnitt för IPAM-plugins och nätverksinsticksprogram.

IPAM-plugin-API: er används för att skapa / ta bort adresspooler och allokera / deallocera behållarens IP-adresser, medan nätverksplugg-API: er används för att skapa / ta bort nätverk och lägga till / ta bort behållare från nätverk.

En CNM har huvudsakligen byggt på 5 objekt: Network Controller, Driver, Network, Endpoint och Sandbox.

Containernätverksmodellobjekt

Nätverkskontrollant: Tillhandahåller startpunkten i Libnetwork som exponerar enkla API: er för Docker Engine för att allokera och hantera nätverk. Eftersom Libnetwork stöder flera inbyggda och avlägsna drivrutiner, gör Network Controller det möjligt för användare att ansluta en viss drivrutin till ett visst nätverk.

Förare: Äger nätverket och ansvarar för att hantera nätverket genom att ha flera förare som deltar för att tillfredsställa olika användningsfall och distributionsscenarier.

Nätverk: Ger anslutning mellan en grupp slutpunkter som tillhör samma nätverk och isoleras från resten. Så när ett nätverk skapas eller uppdateras kommer motsvarande drivrutin att meddelas om händelsen.

Slutpunkt: Ger anslutning för tjänster som exponeras av en container i ett nätverk med andra tjänster som tillhandahålls av andra containrar i nätverket. En slutpunkt representerar en tjänst och inte nödvändigtvis en viss container, Endpoint har också ett globalt omfång inom ett kluster.

Sandlåda: Skapad när användare begär att skapa en slutpunkt i ett nätverk. En sandlåda kan ha flera slutpunkter kopplade till olika nätverk som representerar behållarens nätverkskonfiguration såsom IP-adress, MAC-adress, rutter, DNS.

Så det var de fem huvudobjekten för CNM.

Låt mig berätta de olika nätverksdrivrutinerna som är involverade i Docker-nätverk.

Vill du ta DevOps-lärande till en nästa nivå?

Nätverksdrivrutiner

Det finns huvudsakligen 5 nätverksdrivrutiner: Bridge, Host, None, Overlay, Macvlan

Bro: Bridge-nätverket är ett privat internt standardnätverk som skapats av dockaren på värden. Så alla behållare får en intern IP-adress och dessa behållare kan komma åt varandra med hjälp av denna interna IP. Bridge-nätverken används vanligtvis när dina applikationer körs i fristående behållare som behöver kommunicera.

vad används datavetenskap för

Värd : Den här drivrutinen tar bort nätverksisoleringen mellan dockervärden och dockerbehållarna för att använda värdens nätverk direkt. Så med detta kommer du inte att kunna köra flera webbcontainrar på samma värd, på samma port som porten nu är gemensam för alla containrar i värdnätverket.

Ingen : I denna typ av nätverk är behållare inte anslutna till något nätverk och har ingen åtkomst till det externa nätverket eller andra behållare. Så detta nätverk används närdu vill inaktivera nätverksstacken på en container och,skapa bara en loopback-enhet.

Täcka över : Skapar ett internt privat nätverk som spänner över alla noder som deltar i svärmklustret. Så, Overlay-nätverk underlättar kommunikationen mellan en svärmstjänst och en fristående container eller mellan två fristående behållare på olika Docker Daemons.

Macvlan: Låter dig tilldela en MAC-adress till en container, så att den visas som en fysisk enhet i ditt nätverk. Docker-daemon dirigerar sedan trafik till behållare efter deras MAC-adresser. Macvlan-drivrutinen är det bästa valet när du förväntas vara direkt ansluten till det fysiska nätverket snarare än att dirigeras genom Docker-värdens nätverksstack.

Okej, så det var all teori som krävs för att förstå Docker Networking. Låt mig nu gå vidare och visa dig praktiskt taget hur nätverken skapas och containrar kommunicerar med varandra.

Praktisk

Så med ett antagande att ni alla har installerat Docker på era system har jag ett scenario att visa upp.

Antag att du vill lagra kursnamn och kurs-ID, som du behöver en webbapplikation för. I grund och botten behöver du en behållare för webbapplikation och du behöver ytterligare en behållare som MySQL för backend, att MySQL-behållaren ska länkas till webbapplikationsbehållaren.

Vad sägs om att jag utför det ovan nämnda exemplet praktiskt taget.

Steg involverade:

  • Initiera Docker Swarm för att bilda ett Swarm-kluster.
  • Skapa ett överläggsnätverk
  • Skapa tjänster för både webbapplikation och MySQL
  • Anslut applikationerna via nätverket

Låt oss börja!

Steg 1: Initiera Docker Swarm på maskinen.

docker svärm init - advertise-addr 192.168.56.101

Flaggan –advertise-addr konfigurerar chefsnoden för att publicera sin adress som 192.168.56.101. De andra noder i svärmen måste kunna komma åt hanteraren vid IP-adressen.

Steg 2: Om du nu vill gå med den här managernoden till arbetarnoden, kopiera den länk som du får när du initialiserar svärmen på arbetarnoden.
Steg 3: Skapa ett överläggsnätverk.

dockernätverk skapa -d overlay myoverlaynetwork

Där myoverlay är nätverksnamnet och -d kan Docker Daemon köras i bakgrunden.

Steg 4.1: Skapa en tjänstwebapp1 och använd nätverket du har skapat för att distribuera den här tjänsten över svärmklustret.

docker-tjänst skapa - namn webbapp1 -d - nätverk myoverlaynetwork -p 8001: 80 hshar / webapp

Var -pär för port vidarebefordran,hsharär kontonamnet på Docker Hub och webapp är namnet på den webbapplikation som redan finns på Docker Hub.

Steg 4.2: Kontrollera nu om tjänsten skapas eller inte.

dockningservice ls

Steg 5.1: Skapa nu en tjänst MySQL och använd nätverket du har skapat för att distribuera tjänsten över svärmklustret.

docker-tjänst skapa --namn mysql -d --network myoverlaynetwork -p 3306: 3306 hshar / mysql: 5.5


Steg 5.2: Kontrollera nu om tjänsten skapas eller inte.

dockningservice ls

Steg 6.1: Efter det, kontrollera vilken behållare som körs på din huvudnod och gå in i hshar / webapp-behållaren.

docker ps

Steg 6.2: Så du kan se att endast webapp-tjänsten finns i managernoden. Så kom in i webapp-behållaren.

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

Docker ps-kommandot listar båda dina containrar med respektive container-id. Det andra kommandot aktiverar behållaren i ett interaktivt läge.

Steg 7: Ändra nu $ servernamnet från localhost till mysql och $ lösenord från '' 'till' edureka ', och ändra också alla fyll i databasinformation som krävs och spara din index.php-fil med hjälp av kortkommandot Ctrl + x och därefter y för att spara och tryck på Enter.

Steg 8: Gå nu in i mysql-behållaren som körs på en annan nod.

docker exec -it container_id bash

Steg 9: När du har gått in i mysql-behållaren anger du kommandona nedan för att använda databasen i MySQL.

Steg 9.1: Få tillgång till att använda mysql-behållaren.

mysql -u root -pedureka

Var -u representerar användaren och -p är lösenordet för din maskin.

Steg 9.2: Skapa en databas i mysql som kommer att användas för att hämta data från webapp1.

SKAPA DATABASER HandsOn

Steg 9.3: Använd den skapade databasen.

hur man skapar en fil i java
ANVÄND HandsOn

Steg 9.4: Skapa en tabell i denna databas som kommer att användas för att hämta data från webapp1.

SKAPA TABELL kursinformation (kursnamn VARCHAR (10), kurs_id VARCHAR (11))

Steg 9.5: Avsluta nu MySQL och container med kommandot utgång .

Steg 10: Gå till din webbläsare och ange adressen som localhost: 8001 / index.php . Detta öppnar din webbapplikation. Ange nu information om kurser och klicka på Skicka fråga .

Steg 11: När du klickar på Skicka fråga, gå till noden där din MySQL-tjänst körs och gå sedan in i behållaren.

docker exec -it container_id bash mysql -u root -pedureka ANVÄND HandsOn SHOW-tabeller välj * från kurs_detaljer

Detta visar resultat från alla banor, som du har fyllt i detaljerna i.

Här avslutar jag min Docker Networking-blogg. Jag hoppas att du har haft det här inlägget. Du kan kolla andra bloggar i serien också, som handlar om grunderna i Docker.

Om du tyckte att denna Docker Container-blogg var relevant, kolla in av Edureka, ett pålitligt online-lärande företag med ett nätverk av mer än 450 000 nöjda elever spridda över hela världen. Edureka DevOps Certification Training-kursen hjälper eleverna att få expertis inom olika DevOps-processer och verktyg som Puppet, Jenkins, Docker, Nagios, Ansible och GIT för att automatisera flera steg i SDLC.

Letar du efter certifiering i DevOps?

Har du en fråga till mig? Vänligen nämna det i kommentarfältet så återkommer jag till dig.