Docker Networking - Explorați modul în care containerele comunică între ele



Aflați totul despre capacitățile de rețea Docker cu o înțelegere a modelului de rețea de containere și implementarea acestuia cu un hands-on.

În lumea de astăzi, întreprinderile au devenit dornice de containerizare, ceea ce necesită abilități puternice de rețea pentru a configura în mod corespunzător o arhitectură de containere și, astfel, acesta introduce conceptul de rețea Docker.

În acest blog despre Docker Networking, veți trece prin următoarele subiecte:





Ce este Docker?

Pentru a înțelege Docker, trebuie să știți despre istoricul modului în care aplicațiile au fost implementate înainte și apoi cum sunt implementate aplicațiile folosind containere acum.

Implementarea aplicațiilor în mod vechi și nou - Docker Networking - Edureka



După cum puteți vedea în diagrama de mai sus, vechiul mod avea aplicații pe gazdă.Deci, n număr de aplicații partajează bibliotecile prezente în acel sistem de operare.Dar, odată cu containerizarea, sistemul de operare va avea un nucleu care este singurul lucru care va fi comun între toate aplicațiile.Deci, aplicațiile nu pot accesa reciproc bibliotecile.

Asa de, Docher în termeni simpli este o platformă deschisă pentru dezvoltarea, livrarea și rularea aplicațiilor, permițând utilizatorului să separe aplicațiile de infrastructuri cu ajutorul containere pentru a livra software-ul rapid.

Deci, cum comunică aceste containere între ele în diverse situații?



Ei bine, asta vine prin Docker Networking.

Rețea Docker

Înainte să mă adânc în Docker Networking, permiteți-mi să vă arăt fluxul de lucru al Docker.

cum se folosește system.exit în java

După cum puteți vedea în diagrama de mai sus. Un dezvoltator scrie un cod care stipulează cerințele aplicației sau dependențele într-un fișier Docker ușor de scris, iar acest fișier Docker produce imagini Docker. Deci, orice dependență este necesară pentru o anumită aplicație este prezentă în această imagine.

Acum, containerele Docker nu sunt altceva decât instanța de rulare a Docker Image. Aceste imagini sunt încărcate pe Docker Hub (depozit Git pentru imagini Docker) care conține depozite publice / private.

Deci, din depozitele publice, vă puteți extrage și imaginea și puteți încărca propriile imagini pe Docker Hub. Apoi, de la Docker Hub, diverse echipe, cum ar fi asigurarea calității sau echipele de producție, vor trage acea imagine și își vor pregăti propriile containere. Aceste containere individuale comunică între ele printr-o rețea pentru a efectua acțiunile necesare și acest lucru nu este altceva decât Docker Networking.

Deci, puteți defini Docker Networking ca un pasaj de comunicație prin care toate containerele izolate comunică între ele în diverse situații pentru a efectua acțiunile necesare.

Care credeți că sunt obiectivele Docker Networking?

Obiectivele rețelei Docker

Flexibilitate - Docker oferă flexibilitate, permițând orice număr de aplicații de pe diferite platforme să comunice între ele.

Cross-Platform - Docker poate fi utilizat cu ușurință în platforme multiple care funcționează pe diferite servere cu ajutorul Docker Swarm Clusters.

Scalabilitate - Docker este o rețea complet distribuită, care permite aplicațiilor să crească și să se extindă individual, asigurând în același timp performanțe.

Descentralizat - Docker utilizează o rețea descentralizată, care permite capacitatea de a avea aplicațiile răspândite și extrem de disponibile. În cazul în care un container sau o gazdă lipsește brusc din rezerva dvs. de resurse, puteți fie să aduceți o resursă suplimentară, fie să treceți la servicii care sunt încă disponibile.

Ușor de utilizat - Docker facilitează automatizarea implementării serviciilor, făcându-le ușor de utilizat în viața de zi cu zi.

A sustine - Docker oferă suporturi out-of-the-box. Așadar, capacitatea de a utiliza Docker Enterprise Edition și de a obține toate funcționalitățile foarte ușor și direct, face ca platforma Docker să fie foarte ușor de utilizat.

Pentru a activa obiectivele de mai sus, aveți nevoie de ceva cunoscut sub numele de model de rețea de containere.

Doriți să explorați diferite etape DevOps?

Modelul rețelei de containere (CNM)

Înainte de a vă spune ce este exact un model de rețea de containere, permiteți-mi să vă informez despre Libnetwork care este necesar înainte de a înțelege CNM.

Libnetwork este o bibliotecă open source Docker care implementează toate conceptele cheie care alcătuiesc CNM.

Asa de, Modelul rețelei de containere (CNM) standardizează pașii necesari pentru a furniza rețea pentru containere utilizând mai multe drivere de rețea. CNM necesită un magazin distribuit de valori cheie, cum ar fi consola, pentru a stoca configurația rețelei.

CNM are interfețe pentru pluginuri IPAM și pluginuri de rețea.

API-urile pentru plugin-ul IPAM sunt utilizate pentru a crea / șterge pool-uri de adrese și pentru a aloca / delocați adresele IP ale containerelor, în timp ce API-urile pentru plugin-ul de rețea sunt utilizate pentru a crea / șterge rețele și pentru a adăuga / elimina containere din rețele.

Un CNM a construit în principal pe 5 obiecte: controler de rețea, driver, rețea, punct final și sandbox.

Obiecte de model de rețea de containere

Controlor de rețea: Oferă punctul de intrare în Libnetwork care expune API-uri simple pentru Docker Engine pentru alocarea și gestionarea rețelelor. Deoarece Libnetwork acceptă mai multe drivere încorporate și la distanță, Network Controller permite utilizatorilor să atașeze un anumit driver la o anumită rețea.

Conducător auto: Deține rețeaua și este responsabil pentru gestionarea rețelei prin participarea mai multor drivere pentru a satisface diverse cazuri de utilizare și scenarii de implementare.

Reţea: Oferă conectivitate între un grup de puncte finale care aparțin aceleiași rețele și se izolează de restul. Deci, ori de câte ori este creată sau actualizată o rețea, driverul corespunzător va fi informat despre eveniment.

Punct final: Oferă conectivitate pentru serviciile expuse de un container într-o rețea cu alte servicii furnizate de alte containere din rețea. Un punct final reprezintă un serviciu și nu neapărat un anumit container, Endpoint are și un domeniu global în cadrul unui cluster.

Nisip: Creat atunci când utilizatorii solicită să creeze un punct final într-o rețea. Un Sandbox poate avea mai multe puncte finale atașate la diferite rețele care reprezintă configurația rețelei containerului, cum ar fi adresa IP, adresa MAC, rute, DNS.

Deci, acestea au fost cele 5 obiecte principale ale CNM.

Acum, permiteți-mi să vă spun diferitele drivere de rețea implicate în rețeaua Docker.

Doriți să luați DevOps Learning la un nivel următor?

Drivere de rețea

Există în principal 5 drivere de rețea: Bridge, Host, None, Overlay, Macvlan

Pod: Rețeaua bridge este o rețea internă implicită privată creată de andocare pe gazdă. Deci, toate containerele primesc o adresă IP internă și aceste containere se pot accesa reciproc, utilizând acest IP intern. Rețelele Bridge sunt de obicei utilizate atunci când aplicațiile dvs. rulează în containere independente care trebuie să comunice.

Gazdă : Acest driver elimină izolarea rețelei între gazda de andocare și containerele de andocare pentru a utiliza direct rețeaua gazdei. Deci, cu aceasta, nu veți putea rula mai multe containere web pe aceeași gazdă, pe același port pe care portul este acum comun tuturor containerelor din rețeaua gazdă.

Nici unul : În acest tip de rețea, containerele nu sunt atașate la nicio rețea și nu au acces la rețeaua externă sau la alte containere. Deci, această rețea este utilizată cânddoriți să dezactivați complet stiva de rețea pe un container și,creați numai un dispozitiv loopback.

Acoperire : Creează o rețea privată internă care se întinde pe toate nodurile care participă la clusterul de roi. Deci, rețelele Overlay facilitează comunicarea între un serviciu de roi și un container independent sau între două containere independente pe diferite Docker Daemons.

Macvlan: Vă permite să atribuiți o adresă MAC unui container, făcându-l să apară ca dispozitiv fizic în rețeaua dvs. Apoi, demonul Docker direcționează traficul către containere după adresele lor MAC. Driverul Macvlan este cea mai bună alegere atunci când vă așteptați să fiți conectat direct la rețeaua fizică, mai degrabă decât direcționat prin stiva de rețea a gazdei Docker.

Bine, deci asta a fost toată teoria necesară pentru a înțelege Docker Networking. Acum, permiteți-mi să merg mai departe și să vă arăt practic cum sunt create rețelele și containerele comunică între ele.

Implicat activ

Deci, presupunând că toți ați instalat Docker pe sistemele dvs., am un scenariu de prezentat.

Să presupunem că doriți să stocați numele cursurilor și ID-ul cursurilor, pentru care veți avea nevoie de o aplicație web. Practic, aveți nevoie de un container pentru aplicația web și aveți nevoie de încă un container ca MySQL pentru backend, acel container MySQL ar trebui să fie conectat la containerul aplicației web.

Ce zici să execut practic exemplul menționat mai sus.

Pașii implicați:

  • Inițializați Docker Swarm pentru a forma un cluster Swarm.
  • Creați o rețea de suprapunere
  • Creați servicii atât pentru aplicația web, cât și pentru MySQL
  • Conectați aplicațiile prin rețea

Să începem!

Pasul 1: Inițializați Docker Swarm pe aparat.

docker swarm init --advertise-addr 192.168.56.101

Steagul –advertise-addr configurează nodul managerului pentru a-și publica adresa ca 192.168.56.101. Celelalte noduri din roi trebuie să poată accesa managerul la adresa IP.

Pasul 2: Acum, dacă doriți să vă alăturați acestui nod manager la nodul lucrător, copiați linkul pe care îl obțineți atunci când inițializați roiul pe nodul lucrător.
Pasul 3: Creați o rețea suprapusă.

docker network create -d overlay myoverlaynetwork

Unde myoverlay este numele rețelei și -d permite Docker Daemon să ruleze în fundal.

Pasul 4.1: Creați un serviciu webapp1 și utilizați rețeaua pe care ați creat-o pentru a implementa acest serviciu pe clusterul de roi.

docker service create --name webapp1 -d --network myoverlaynetwork -p 8001: 80 hshar / webapp

Unde -peste pentru expedierea porturilor,hshareste numele contului de pe Docker Hub, iar aplicația web este numele aplicației web deja prezente pe Docker Hub.

Pasul 4.2: Acum, verificați dacă serviciul este creat sau nu.

docker service ls

implementare max heap în java

Pasul 5.1: Acum, creați un serviciu MySQL și utilizați rețeaua pe care ați creat-o pentru a implementa serviciul pe clusterul de roi.

docker service create --name mysql -d --network myoverlaynetwork -p 3306: 3306 hshar / mysql: 5.5


Pasul 5.2: Acum, verificați dacă serviciul este creat sau nu.

docker service ls

Pasul 6.1: După aceea, verificați ce container rulează pe nodul dvs. principal și mergeți în containerul hshar / webapp.

docker ps

Pasul 6.2: Deci, puteți vedea că numai nodul de servicii web se află pe nodul manager. Așadar, intrați în containerul webapp.

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

Comanda docker ps va afișa ambele containere cu ID-ul containerului respectiv. A doua comandă va activa acel container într-un mod interactiv.

Pasul 7: Acum, schimbați numele $ servern din localhost în mysql și $ parola din „” ”în„ edureka ”și, de asemenea, schimbați toate completările în baza de date necesare și salvați fișierul index.php utilizând comanda rapidă de la tastatură Ctrl + x și după aceea y pentru a salva și apăsați Enter.

Pasul 8: Acum, intrați în containerul mysql care rulează pe un alt nod.

docker exec -it container_id bash

Pasul 9: Odată ce intrați în containerul mysql, introduceți comenzile de mai jos pentru a utiliza baza de date în MySQL.

Pasul 9.1: Obțineți un acces pentru a utiliza containerul mysql.

mysql -u root -pedureka

Unde -u reprezintă utilizatorul și -p este parola mașinii dvs.

Pasul 9.2: Creați o bază de date în mysql care va fi utilizată pentru a obține date de pe webapp1.

CREAȚI HandsOn BAZA DE DATE

Pasul 9.3: Utilizați baza de date creată.

UTILIZAȚI HandsOn

Pasul 9.4: Creați un tabel în această bază de date care va fi utilizat pentru a obține date de pe webapp1.

CREATE TABLE course_details (course_name VARCHAR (10), course_id VARCHAR (11))

Pasul 9.5: Acum, ieșiți din MySQL și container, de asemenea, folosind comanda Ieșire .

Pasul 10: Accesați browserul și introduceți adresa ca localhost: 8001 / index.php . Aceasta vă va deschide aplicația web. Acum, introduceți detaliile cursurilor și faceți clic pe Trimite interogarea .

Pasul 11: După ce faceți clic pe Trimitere interogare, accesați nodul în care rulează serviciul MySQL și apoi intrați în container.

docker exec -it container_id bash mysql -u root -pedureka USE HandsOn SHOW tabele selectați * din course_details

Aceasta vă va arăta rezultatul tuturor cursurilor, despre care ați completat detaliile.

Aici, închei blogul meu Docker Networking. Sper că v-a plăcut această postare. Puteți verifica alte bloguri și în serie, care se ocupă de elementele de bază ale lui Docker.

Dacă ați găsit relevant acest blog Docker Container, consultați de Edureka, o companie de învățare online de încredere, cu o rețea de peste 450.000 de cursanți mulțumiți răspândiți pe tot globul. Cursul Edureka DevOps Certification Training ajută cursanții să câștige expertiză în diferite procese și instrumente DevOps, cum ar fi Puppet, Jenkins, Docker, Nagios, Ansible și GIT pentru automatizarea mai multor pași în SDLC.

Căutați certificare în DevOps?

Ai o întrebare pentru mine? Vă rugăm să o menționați în secțiunea de comentarii și vă voi răspunde.