Docker Networking: esplora il modo in cui i contenitori comunicano tra loro

Scopri tutto sulle funzionalità di rete di Docker con una comprensione del modello di rete del contenitore e l'implementazione con un pratico.

Nel mondo di oggi, le imprese si sono appassionate alla containerizzazione che richiede forti capacità di networking per configurare correttamente un'architettura container, e quindi, questo introduce il concetto di Docker Networking.

In questo blog su Docker Networking, affronterai i seguenti argomenti:





Cos'è Docker?

Per comprendere Docker, è necessario conoscere la cronologia di come le applicazioni sono state distribuite prima e poi come le applicazioni vengono distribuite utilizzando i contenitori ora.

Distribuzione di applicazioni in modo vecchio e nuovo - Docker Networking - Edureka



Come puoi vedere nel diagramma sopra, il vecchio modo aveva applicazioni sull'host.Quindi, n numero di applicazioni condividono le librerie presenti in quel sistema operativo.Ma, con la containerizzazione, il sistema operativo avrà un kernel che è l'unica cosa che sarà comune a tutte le applicazioni.Quindi, le applicazioni non possono accedere alle librerie dell'altra.

programma di ricerca binaria in java

Così, Docker in termini semplici è una piattaforma aperta per lo sviluppo, la spedizione e l'esecuzione di applicazioni, che consente all'utente di separare le applicazioni dalle infrastrutture con l'aiuto di contenitori per fornire rapidamente il software.

Quindi, come comunicano tra loro questi contenitori in varie situazioni?



Bene, questo avviene tramite Docker Networking.

Docker Networking

Prima di immergermi in profondità in Docker Networking, lascia che ti mostri il flusso di lavoro di Docker.

Come puoi vedere nel diagramma sopra. Uno sviluppatore scrive un codice che stabilisce i requisiti dell'applicazione o le dipendenze in un file Docker facile da scrivere e questo file Docker produce immagini Docker. Quindi, qualsiasi dipendenza richiesta per una particolare applicazione è presente in questa immagine.

Ora, i Docker Containers non sono altro che l'istanza di runtime di Docker Image. Queste immagini vengono caricate sull'hub Docker (repository Git per immagini Docker) che contiene repository pubblici / privati.

Quindi, dai repository pubblici, puoi anche estrarre la tua immagine e puoi caricare le tue immagini sul Docker Hub. Quindi, da Docker Hub, vari team come i team di controllo qualità o di produzione estrarranno quell'immagine e prepareranno i propri contenitori. Questi singoli contenitori, comunicano tra loro attraverso una rete per eseguire le azioni richieste, e questo non è altro che Docker Networking.

Quindi, puoi definire Docker Networking come un passaggio di comunicazione attraverso il quale tutti i contenitori isolati comunicano tra loro in varie situazioni per eseguire le azioni richieste.

Quali pensi siano gli obiettivi di Docker Networking?

Obiettivi di Docker Networking

Flessibilità - Docker offre flessibilità consentendo a un numero qualsiasi di applicazioni su varie piattaforme di comunicare tra loro.

Cross-platform - Docker può essere facilmente utilizzato in multipiattaforma che funziona su vari server con l'aiuto di Docker Swarm Clusters.

Scalabilità - Docker è una rete completamente distribuita, che consente alle applicazioni di crescere e scalare individualmente garantendo al contempo le prestazioni.

Decentralizzato - Docker utilizza una rete decentralizzata, che consente la capacità di avere le applicazioni diffuse e altamente disponibili. Nel caso in cui un contenitore o un host manchi improvvisamente dal tuo pool di risorse, puoi richiamare una risorsa aggiuntiva o passare a servizi ancora disponibili.

Facile da usare - Docker semplifica l'automazione della distribuzione dei servizi, rendendoli facili da usare nella vita di tutti i giorni.

Supporto - Docker offre supporti pronti all'uso. Quindi, la possibilità di utilizzare Docker Enterprise Edition e ottenere tutte le funzionalità in modo molto semplice e diretto, rende la piattaforma Docker molto facile da usare.

Per abilitare gli obiettivi di cui sopra, è necessario qualcosa noto come modello di rete del contenitore.

Vuoi esplorare varie fasi DevOps?

Container Network Model (CNM)

Prima di dirti cos'è esattamente un modello di rete di contenitori, lascia che ti informi su Libnetwork che è necessario prima di capire CNM.

Libnetwork è una libreria Docker open source che implementa tutti i concetti chiave che compongono il CNM.

Così, Container Network Model (CNM) standardizza i passaggi necessari per fornire la rete per i contenitori che utilizzano più driver di rete. CNM richiede un archivio chiave-valore distribuito come console per memorizzare la configurazione di rete.

Il CNM dispone di interfacce per plug-in IPAM e plug-in di rete.

Le API del plug-in IPAM vengono utilizzate per creare / eliminare pool di indirizzi e allocare / rilasciare indirizzi IP del contenitore, mentre le API del plug-in di rete vengono utilizzate per creare / eliminare reti e aggiungere / rimuovere contenitori dalle reti.

Un CNM si basa principalmente su 5 oggetti: controller di rete, driver, rete, endpoint e sandbox.

Oggetti del modello di rete del contenitore

Controllore di rete: Fornisce il punto di ingresso in Libnetwork che espone semplici API per Docker Engine per allocare e gestire le reti. Poiché Libnetwork supporta più driver integrati e remoti, il controller di rete consente agli utenti di collegare un determinato driver a una determinata rete.

Driver: Possiede la rete ed è responsabile della gestione della rete grazie alla partecipazione di più driver per soddisfare vari casi d'uso e scenari di distribuzione.

Rete: Fornisce connettività tra un gruppo di endpoint che appartengono alla stessa rete e isolano dal resto. Pertanto, ogni volta che viene creata o aggiornata una rete, il Driver corrispondente verrà informato dell'evento.

Endpoint: Fornisce la connettività per i servizi esposti da un contenitore in una rete con altri servizi forniti da altri contenitori nella rete. Un endpoint rappresenta un servizio e non necessariamente un particolare contenitore, anche Endpoint ha un ambito globale all'interno di un cluster.

Sandbox: Creato quando gli utenti richiedono di creare un endpoint su una rete. Un Sandbox può avere più endpoint collegati a reti diverse che rappresentano la configurazione di rete del contenitore come indirizzo IP, indirizzo MAC, route, DNS.

Quindi, quelli erano i 5 oggetti principali del CNM.

Ora, lascia che ti dica i vari driver di rete coinvolti nella rete Docker.

Vuoi portare l'apprendimento DevOps a un livello successivo?

Driver di rete

Esistono principalmente 5 driver di rete: Bridge, Host, Nessuno, Overlay, Macvlan

Ponte: La rete bridge è una rete interna predefinita privata creata da Docker sull'host. Quindi, tutti i contenitori ottengono un indirizzo IP interno e questi contenitori possono accedersi l'un l'altro, utilizzando questo IP interno. Le reti Bridge vengono solitamente utilizzate quando le applicazioni vengono eseguite in contenitori autonomi che devono comunicare.

Ospite : Questo driver rimuove l'isolamento di rete tra l'host Docker e i contenitori Docker per utilizzare direttamente la rete dell'host. Quindi, con questo, non sarai in grado di eseguire più contenitori Web sullo stesso host, sulla stessa porta in cui la porta è ora comune a tutti i contenitori nella rete host.

Nessuna : In questo tipo di rete, i contenitori non sono collegati a nessuna rete e non hanno accesso alla rete esterna o ad altri contenitori. Quindi, questa rete viene utilizzata quandovuoi disabilitare completamente lo stack di rete su un contenitore e,creare solo un dispositivo di loopback.

Sovrapposizione : Crea una rete privata interna che si estende su tutti i nodi che partecipano al cluster swarm. Pertanto, le reti Overlay facilitano la comunicazione tra un servizio swarm e un container autonomo o tra due container autonomi su diversi Docker Daemon.

Macvlan: Ti permette di assegnare un indirizzo MAC a un container, facendolo apparire come un dispositivo fisico sulla tua rete. Quindi, il demone Docker instrada il traffico ai container tramite i loro indirizzi MAC. Il driver Macvlan è la scelta migliore quando ci si aspetta che tu sia connesso direttamente alla rete fisica, piuttosto che instradato attraverso lo stack di rete dell'host Docker.

Bene, quindi questa era tutta la teoria richiesta per comprendere Docker Networking. Ora, lasciatemi andare avanti e vi mostro praticamente come vengono create le reti e i contenitori comunicano tra loro.

Mani su

Quindi, supponendo che tutti voi abbiate installato Docker sui vostri sistemi, ho uno scenario da mostrare.

Si supponga di voler memorizzare il nome e l'ID del corso, per il quale sarà necessaria un'applicazione web. Fondamentalmente, hai bisogno di un contenitore per l'applicazione web e hai bisogno di un altro contenitore come MySQL per il backend, quel contenitore MySQL dovrebbe essere collegato al contenitore dell'applicazione web.

come creare parametri in tableau

Che ne dici di eseguire praticamente l'esempio sopra indicato.

Passaggi coinvolti:

  • Inizializza Docker Swarm per formare un cluster Swarm.
  • Crea una rete in overlay
  • Crea servizi sia per l'applicazione web che per MySQL
  • Connetti le applicazioni tramite la rete

Iniziamo!

Passo 1: Inizializza Docker Swarm sulla macchina.

docker swarm init --advertise-addr 192.168.56.101

Il flag –advertise-addr configura il nodo del gestore per pubblicare il suo indirizzo come 192.168.56.101. Gli altri nodi nello sciame devono essere in grado di accedere al gestore all'indirizzo IP.

Passo 2: Ora, se desideri unire questo nodo del gestore al nodo di lavoro, copia il collegamento che ottieni quando inizializzi swarm sul nodo di lavoro.
Passaggio 3: Crea una rete in overlay.

docker network crea -d overlay myoverlaynetwork

Dove myoverlay è il nome della rete e -d consente a Docker Daemon di funzionare in background.

Passaggio 4.1: Crea una webapp di servizio1 e utilizza la rete che hai creato per distribuire questo servizio sul cluster di swarm.

servizio docker crea --name webapp1 -d --network myoverlaynetwork -p 8001: 80 hshar / webapp

Dove -pè per il port forwarding,hsharè il nome dell'account su Docker Hub e webapp è il nome dell'applicazione web già presente su Docker Hub.

Passaggio 4.2: Ora controlla se il servizio è stato creato o meno.

servizio docker ls

Passaggio 5.1: Ora, crea un servizio MySQL e usa la rete che hai creato per distribuire il servizio sul cluster swarm.

servizio docker crea --name mysql -d --network myoverlaynetwork -p 3306: 3306 hshar / mysql: 5.5


Passaggio 5.2: Ora controlla se il servizio è stato creato o meno.

servizio docker ls

Passaggio 6.1: Successivamente, controlla quale contenitore è in esecuzione sul tuo nodo principale e vai nel contenitore hshar / webapp.

docker ps

Passaggio 6.2: Quindi, puoi vedere che solo il servizio webapp è sul nodo del gestore. Quindi, entra nel contenitore della webapp.

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

Il comando docker ps elencherà entrambi i contenitori con il rispettivo ID contenitore. Il secondo comando abiliterà quel contenitore in modalità interattiva.

Passaggio 7: Ora, cambia $ servername da localhost a mysql e $ password da '' 'a' edureka ', e cambia anche tutti i dettagli del database richiesti e salva il tuo file index.php usando la scorciatoia da tastiera Ctrl + x e poi y per salvare e premere invio.

Passaggio 8: Ora vai nel contenitore mysql che è in esecuzione su un altro nodo.

docker exec -it container_id bash

Passaggio 9: Una volta entrati nel contenitore mysql, inserisci i seguenti comandi per utilizzare il database in MySQL.

Passaggio 9.1: Ottieni l'accesso per utilizzare il contenitore mysql.

mysql -u root -pedureka

Dove -u rappresenta l'utente e -p è la password della tua macchina.

Passaggio 9.2: Crea un database in mysql che verrà utilizzato per ottenere dati da webapp1.

CREA DATABASE HandsOn

Passaggio 9.3: Usa il database creato.

USA HandsOn

Passaggio 9.4: Crea una tabella in questo database che verrà utilizzata per ottenere dati da webapp1.

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

Passaggio 9.5: Ora, esci da MySQL e anche dal container usando il comando Uscita .

Passaggio 10: Vai al tuo browser e inserisci l'indirizzo come localhost: 8001 / index.php . Questo aprirà la tua applicazione web. Ora, inserisci i dettagli dei corsi e fai clic su Invia query .

Passaggio 11: Dopo aver fatto clic su Invia query, vai al nodo in cui è in esecuzione il tuo servizio MySQL e poi vai all'interno del contenitore.

docker exec -it container_id bash mysql -u root -pedureka USE HandsOn SHOW tabelle seleziona * da course_details

Questo ti mostrerà l'output di tutti i corsi di cui hai compilato i dettagli.

cos'è un metodo virtuale

Qui, concludo il mio blog Docker Networking. Spero che questo post ti sia piaciuto. Puoi controllare altri blog anche nella serie, che trattano le basi di Docker.

Se hai trovato pertinente questo blog Docker Container, controlla il da Edureka, una società di formazione online affidabile con una rete di oltre 450.000 studenti soddisfatti sparsi in tutto il mondo. Il corso di formazione sulla certificazione DevOps Edureka aiuta gli studenti ad acquisire esperienza in vari processi e strumenti DevOps come Puppet, Jenkins, Docker, Nagios, Ansible e GIT per l'automazione di più passaggi in SDLC.

Cerchi una certificazione in DevOps?

Hai una domanda per me? Per favore, menzionalo nella sezione commenti e ti ricontatterò.