Docker-netwerken - Ontdek hoe containers met elkaar communiceren



Leer alles over de netwerkmogelijkheden van Docker met een goed begrip van het Container Network Model en implementeer dit met een hands-on.

In de wereld van vandaag zijn bedrijven enthousiast geworden over containerisatie, wat sterke netwerkvaardigheden vereist om een ​​containerarchitectuur correct te configureren, en daarom introduceert dit het concept van Docker Networking.

In deze blog over Docker Networking kom je de volgende onderwerpen tegen:





Wat is Docker?

Om Docker te begrijpen, moet u de geschiedenis kennen van hoe applicaties eerder werden geïmplementeerd en vervolgens hoe applicaties nu met containers worden geïmplementeerd.

Implementatie van applicaties op de oude en nieuwe manier - Docker-netwerken - Edureka



Zoals je kunt zien in het bovenstaande diagram, had de oude manier applicaties op de host.Dus n aantal applicaties deelt de bibliotheken die in dat besturingssysteem aanwezig zijn.Maar met containerisatie zal het besturingssysteem een ​​kernel hebben die het enige is dat gemeenschappelijk zal zijn tussen alle applicaties.Applicaties hebben dus geen toegang tot elkaars bibliotheken.

Zo, Docker is in eenvoudige bewoordingen een open platform voor het ontwikkelen, verzenden en uitvoeren van applicaties, waardoor de gebruiker applicaties kan scheiden van infrastructuren met behulp van containers om software snel te leveren.

Dus, hoe communiceren deze containers met elkaar in verschillende situaties?



Nou, dat komt via Docker Networking.

Docker-netwerken

Voordat ik diep in Docker Networking duik, wil ik je de workflow van Docker laten zien.

Zoals je kunt zien in het bovenstaande diagram. Een ontwikkelaar schrijft een code die toepassingsvereisten of de afhankelijkheden bepaalt in een eenvoudig te schrijven Docker-bestand en dit Docker-bestand produceert Docker-images. Dus alle afhankelijkheden die vereist zijn voor een bepaalde toepassing, zijn aanwezig in deze afbeelding.

Nu zijn Docker-containers niets anders dan de runtime-instantie van Docker Image. Deze afbeeldingen worden geüpload naar de Docker Hub (Git-opslagplaats voor Docker-afbeeldingen) die openbare / privé-opslagplaatsen bevat.

Dus vanuit openbare repositories kun je ook je afbeelding ophalen en je eigen afbeeldingen uploaden naar de Docker Hub. Vervolgens zullen vanuit Docker Hub verschillende teams, zoals kwaliteitsborging of productieteams, dat beeld trekken en hun eigen containers voorbereiden. Deze individuele containers communiceren met elkaar via een netwerk om de vereiste acties uit te voeren, en dit is niets anders dan Docker Networking.

U kunt Docker Networking dus definiëren als een communicatiedoorgang waardoor alle geïsoleerde containers in verschillende situaties met elkaar communiceren om de vereiste acties uit te voeren.

Wat zijn volgens jou de doelen van Docker Networking?

Doelen van Docker-netwerken

Flexibiliteit - Docker biedt flexibiliteit door een onbeperkt aantal applicaties op verschillende platforms met elkaar te laten communiceren.

Cross-platform - Docker kan eenvoudig worden gebruikt in platformonafhankelijke systemen die op verschillende servers werken met behulp van Docker Swarm Clusters.

Schaalbaarheid - Docker is een volledig gedistribueerd netwerk, waarmee applicaties afzonderlijk kunnen groeien en schalen terwijl de prestaties worden gegarandeerd.

Gedecentraliseerd - Docker maakt gebruik van een gedecentraliseerd netwerk, waardoor de applicaties verspreid en hoog beschikbaar kunnen zijn. In het geval dat er plotseling een container of een host ontbreekt in uw resourcepool, kunt u een extra resource oproepen of overgaan naar services die nog steeds beschikbaar zijn.

Gebruikersvriendelijk - Docker maakt het eenvoudig om de implementatie van services te automatiseren, waardoor ze gemakkelijk te gebruiken zijn in het dagelijks leven.

Ondersteuning - Docker biedt out-of-the-box ondersteuning. Dus de mogelijkheid om Docker Enterprise Edition te gebruiken en alle functionaliteit heel gemakkelijk en ongecompliceerd te krijgen, maakt het Docker-platform heel gemakkelijk te gebruiken.

Om de bovenstaande doelen mogelijk te maken, hebt u iets nodig dat bekend staat als het Container Network Model.

Wilt u verschillende DevOps-stadia verkennen?

Container Network Model (CNM)

Voordat ik u vertel wat precies een Container Network Model is, wil ik u eerst informeren over Libnetwork dat nodig is voordat u CNM begrijpt.

Libnetwork is een open source Docker-bibliotheek die alle sleutelconcepten van de CNM implementeert.

Zo, Container Network Model (CNM) standaardiseert de stappen die nodig zijn om netwerken voor containers te bieden met behulp van meerdere netwerkstuurprogramma's. CNM vereist een gedistribueerde key-value store-achtige console om de netwerkconfiguratie op te slaan.

De CNM heeft interfaces voor IPAM-plug-ins en netwerkplug-ins.

De IPAM-plug-in-API's worden gebruikt om adrespools te maken / verwijderen en container-IP-adressen toe te wijzen / ongedaan te maken, terwijl de netwerk-plug-in-API's worden gebruikt om netwerken te maken / verwijderen en containers toe te voegen / te verwijderen uit netwerken.

Een CNM heeft voornamelijk gebouwd op 5 objecten: netwerkcontroller, stuurprogramma, netwerk, eindpunt en sandbox.

Container Network Model Objects

Netwerk beheerder: Biedt het toegangspunt tot Libnetwork dat eenvoudige API's beschikbaar stelt voor Docker Engine om netwerken toe te wijzen en te beheren. Omdat Libnetwork meerdere ingebouwde en externe stuurprogramma's ondersteunt, stelt Network Controller gebruikers in staat om een ​​bepaald stuurprogramma aan een bepaald netwerk te koppelen.

Bestuurder: Is eigenaar van het netwerk en is verantwoordelijk voor het beheer van het netwerk door meerdere stuurprogramma's te laten deelnemen om te voldoen aan verschillende use-cases en implementatiescenario's.

Netwerk: Biedt connectiviteit tussen een groep eindpunten die tot hetzelfde netwerk behoren en zich van de rest isoleren. Dus wanneer een netwerk wordt gemaakt of bijgewerkt, wordt de bijbehorende bestuurder op de hoogte gebracht van de gebeurtenis.

Eindpunt: Biedt de connectiviteit voor services die worden weergegeven door een container in een netwerk met andere services die worden geleverd door andere containers in het netwerk. Een endpoint vertegenwoordigt een service en niet noodzakelijk een bepaalde container, Endpoint heeft ook een globaal bereik binnen een cluster.

Zandbak: Gemaakt wanneer gebruikers verzoeken om een ​​eindpunt op een netwerk te maken. Een sandbox kan meerdere eindpunten hebben die zijn gekoppeld aan verschillende netwerken die de netwerkconfiguratie van de container vertegenwoordigen, zoals IP-adres, MAC-adres, routes, DNS.

Dat waren dus de 5 belangrijkste objecten van CNM.

Laat me je nu de verschillende netwerkstuurprogramma's vertellen die betrokken zijn bij Docker-netwerken.

Wilt u DevOps Learning naar een hoger niveau tillen?

Netwerkstuurprogramma's

Er zijn voornamelijk 5 netwerkstuurprogramma's: Bridge, Host, None, Overlay, Macvlan

Brug: Het bridge-netwerk is een privé standaard intern netwerk gemaakt door docker op de host. Alle containers krijgen dus een intern IP-adres en deze containers hebben via dit interne IP-adres toegang tot elkaar. De Bridge-netwerken worden meestal gebruikt wanneer uw applicaties in zelfstandige containers worden uitgevoerd die moeten communiceren.

Gastheer : Dit stuurprogramma verwijdert de netwerkisolatie tussen de docker-host en de docker-containers om het netwerk van de host rechtstreeks te gebruiken. Hiermee kunt u dus niet meerdere webcontainers op dezelfde host draaien, op dezelfde poort, aangezien de poort nu gemeenschappelijk is voor alle containers in het hostnetwerk.

Geen : In dit soort netwerken zijn containers niet verbonden met een netwerk en hebben ze geen toegang tot het externe netwerk of andere containers. Dit netwerk wordt dus gebruikt wanneeru wilt de netwerkstack op een container volledig uitschakelen en,maak alleen een loopback-apparaat.

Overlay : Creëert een intern privénetwerk dat zich uitstrekt over alle knooppunten die deelnemen aan het zwermcluster. Overlay-netwerken vergemakkelijken dus de communicatie tussen een zwermdienst en een stand-alone container, of tussen twee stand-alone containers op verschillende Docker Daemons.

Macvlan: Hiermee kunt u een MAC-adres aan een container toewijzen, zodat deze als een fysiek apparaat in uw netwerk wordt weergegeven. Vervolgens routeert de Docker-daemon verkeer naar containers op basis van hun MAC-adressen. Het Macvlan-stuurprogramma is de beste keuze wanneer van u wordt verwacht dat u rechtstreeks bent verbonden met het fysieke netwerk en niet via de netwerkstack van de Docker-host wordt gerouteerd.

wat serialiseerbaar is in java

Oké, dus dat was alle theorie die nodig was om Docker Networking te begrijpen. Laat me nu verder gaan en u praktisch laten zien hoe de netwerken worden gemaakt en containers met elkaar communiceren.

Hands-on

Dus, in de veronderstelling dat jullie allemaal Docker op jullie systemen hebben geïnstalleerd, heb ik een scenario om te laten zien.

Stel dat u de cursusnaam en cursus-ID wilt opslaan, waarvoor u een webapplicatie nodig heeft. Kortom, je hebt één container nodig voor webapplicatie en je hebt nog een container nodig als MySQL voor de backend, die MySQL-container moet worden gekoppeld aan de webapplicatiecontainer.

Hoe zit het met ik voer het bovengenoemde voorbeeld praktisch uit.

Betrokken stappen:

  • Initialiseer Docker Swarm om een ​​Swarm-cluster te vormen.
  • Maak een overlay-netwerk
  • Maak services voor zowel webapplicaties als MySQL
  • Verbind de applicaties via het netwerk

Laten we beginnen!

Stap 1: Initialiseer Docker Swarm op de machine.

docker zwerm init --advertise-addr 192.168.56.101

De vlag –advertise-addr configureert de manager node om zijn adres als 192.168.56.101 te publiceren. De andere knooppunten in de zwerm moeten toegang hebben tot de manager op het IP-adres.

Stap 2: Als u nu dit managerknooppunt wilt verbinden met het werkknooppunt, kopieert u de link die u krijgt wanneer u zwerm op het werkknooppunt initialiseert.
Stap 3: Creëer een overlay-netwerk.

docker network create -d overlay myoverlaynetwork

Waar myoverlay de netwerknaam is en -d zorgt ervoor dat Docker Daemon op de achtergrond kan worden uitgevoerd.

Stap 4.1: Maak een service-webapp1 en gebruik het netwerk dat u hebt gemaakt om deze service via het zwermcluster te implementeren.

docker-service maken --naam webapp1 -d --network myoverlaynetwork -p 8001: 80 hshar / webapp

Waar -pis voor port forwarding,hsharis de accountnaam op Docker Hub en webapp is de naam van de webtoepassing die al aanwezig is op Docker Hub.

Stap 4.2: Controleer nu of de service is gemaakt of niet.

havenarbeidersdienst ls

Stap 5.1: Maak nu een service MySQL en gebruik het netwerk dat u hebt gemaakt om de service via het zwermcluster te implementeren.

docker-service maak --naam mysql -d --netwerk mijnoverlaynetwerk -p 3306: 3306 hshar / mysql: 5.5


Stap 5.2: Controleer nu of de service is gemaakt of niet.

havenarbeidersdienst ls

Stap 6.1: Controleer daarna welke container op uw masterknooppunt draait en ga naar de hshar / webapp-container.

docker ps

Stap 6.2: U kunt dus zien dat alleen de webapp-service zich op het beheerknooppunt bevindt. Dus ga naar de webapp-container.

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

De docker ps-opdracht geeft beide containers weer met hun respectieve container-ID. Het tweede commando zal die container in een interactieve modus inschakelen.

Stap 7: Verander nu de $ servernaam van localhost in mysql en $ wachtwoord van '' 'naar' edureka ', en verander ook alle vereiste databasegegevens en sla je index.php-bestand op met de sneltoets Ctrl + x en daarna y om op te slaan en druk op enter.

Stap 8: Ga nu naar de mysql-container die op een ander knooppunt wordt uitgevoerd.

docker exec -it container_id bash

Stap 9: Zodra u de mysql-container binnengaat, voert u de onderstaande opdrachten in om de database in MySQL te gebruiken.

Stap 9.1: Krijg toegang om de mysql-container te gebruiken.

mysql -u root -pedureka

Waar -u de gebruiker vertegenwoordigt en -p het wachtwoord van uw machine.

Stap 9.2: Maak een database in mysql die zal worden gebruikt om gegevens van webapp1 op te halen.

MAAK DATABASE HandsOn

Stap 9.3: Gebruik de aangemaakte database.

GEBRUIK HandsOn

Stap 9.4: Maak een tabel in deze database die zal worden gebruikt om gegevens uit webapp1 te halen.

CREATE TABLE cursus_details (cursusnaam VARCHAR (10), cursus_id VARCHAR (11))

Stap 9.5: Sluit nu MySQL en container ook af met de opdracht Uitgang .

Stap 10: Ga naar uw browser en voer het adres in als localhost: 8001 / index.php . Dit opent uw webapplicatie. Voer nu de details van cursussen in en klik op Vraag indienen .

Stap 11: Zodra u op Submit Query hebt geklikt, gaat u naar het knooppunt waarin uw MySQL-service wordt uitgevoerd en gaat u vervolgens naar de container.

docker exec -it container_id bash mysql -u root -pedureka GEBRUIK HandsOn TOON tabellen selecteer * uit course_details

Dit toont je de output van alle cursussen, waarvan je de details hebt ingevuld.

Hier beëindig ik mijn Docker Networking-blog. Ik hoop dat je van dit bericht genoten hebt. Je kunt controleren andere blogs ook in de serie, die de basisprincipes van Docker behandelen.

Als je deze Docker Container-blog relevant vond, bekijk dan het door Edureka, een vertrouwd online leerbedrijf met een netwerk van meer dan 450.000 tevreden leerlingen verspreid over de hele wereld. De Edureka DevOps Certification Training-cursus helpt leerlingen expertise op te doen in verschillende DevOps-processen en tools zoals Puppet, Jenkins, Docker, Nagios, Ansible en GIT voor het automatiseren van meerdere stappen in SDLC.

Op zoek naar certificering in DevOps?

Heeft u een vraag voor mij? Vermeld het in het opmerkingengedeelte en ik neem contact met u op.