Rete Docker è fondamentalmente utilizzato per stabilire la comunicazione tra i container docker e il mondo esterno tramite la macchina host oppure si può dire che è un passaggio di comunicazione attraverso il quale tutti i container isolati comunicano tra loro in varie situazioni per eseguire le azioni richieste. In questa guida, spiegheremo i concetti di base del networking Docker con esempi pratici su Ubuntu.
Se non hai ancora installato Docker, fai riferimento alla seguente guida.
- Come installare Docker in Ubuntu 18.04 LTS Server
Nozioni di base sull'utilizzo di Docker:
- Introduzione a Docker
Spiegazione dei concetti di rete Docker
Tutti i comandi elencati di seguito vengono testati con root privilegi su Ubuntu .
Per gestire le operazioni di rete, come la creazione di una nuova rete, la connessione di un container a una rete, la disconnessione di un container dalla rete, l'elenco delle reti disponibili e la rimozione di reti ecc., utilizziamo il comando seguente:
# docker network
Tipi di driver di rete Docker
Per elencare tutte le tue reti, esegui:
# docker network ls
Facciamo una breve introduzione su tutti loro.
- Rete di ponti : Quando avvii Docker, viene creata automaticamente una rete bridge predefinita. Un container appena avviato si collegherà automaticamente ad esso. È inoltre possibile creare reti bridge personalizzate definite dall'utente. Le reti bridge definite dall'utente sono superiori alla rete bridge predefinita.
- Rete ospitante: Rimuove l'isolamento di rete tra il container e l'host Docker e utilizza direttamente la rete dell'host. Se si esegue un container che si collega alla porta 80 e si utilizza la rete host, l'applicazione del container è disponibile sulla porta 80 sull'indirizzo IP dell'host. Significa che non sarai in grado di eseguire più contenitori Web sullo stesso host, sulla stessa porta poiché la porta è ora comune a tutti i contenitori nella rete host.
- Nessuna rete : In questo tipo di rete, i container non sono collegati ad alcuna rete e non hanno accesso alla rete esterna o ad altri container. Quindi, questa rete viene utilizzata quando vuoi disabilitare completamente lo stack di rete su un container.
- Rete overlay : 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 Docker swarm e un container autonomo, o tra due container standalone su diversi Docker Daemons.
- Rete Macvlan: Alcune applicazioni, in particolare le applicazioni legacy o le applicazioni che monitorano il traffico di rete, prevedono di essere connesse direttamente alla rete fisica. In questo tipo di situazione, puoi utilizzare il driver di rete Macvlan per assegnare un indirizzo MAC all'interfaccia di rete virtuale di ciascun container, facendola sembrare un'interfaccia di rete fisica direttamente connessa alla rete fisica.
Consentimi di mostrarti esercizi pratici sulle reti Bridge e Host.
1. Rete a ponte
Userò due container Alpine per spiegare questo tipo di rete.
Ora gestirò due container Alpine, ovvero C1 e C2 usando i comandi:
# docker run -it -d --name c1 alpine ash
# docker run -it -d --name c2 alpine ash
Successivamente, scopriamo l'indirizzo IP di quei contenitori in esecuzione. Per farlo, esegui:
# docker exec -it c1 sh –c “ip a”
# docker exec -it c2 sh –c “ip a”
Come puoi vedere, l'indirizzo IP del container C1 è 172.17.0.2 e l'indirizzo IP di C2 è 172.17.0.3 .
Ora andiamo avanti e proviamo a scambiarci un ping per assicurarci che siano in grado di comunicare.
Innanzitutto, collega al contenitore C1 in esecuzione e prova a eseguire il ping del contenitore C2:
# docker attach c1
# Ping –c 2 172.17.0.3
Allo stesso modo, collega al contenitore C2 e prova a eseguire il ping del contenitore C1.
# docker attach c2
# Ping –c 2 172.17.0.2
Come puoi vedere negli screenshot sopra, la comunicazione sta avvenendo tra i container con nella stessa rete.
Possiamo anche verificarlo ispezionando la rete del bridge usando il comando:
# docker network inspect bridge
Il comando precedente visualizzerà tutte le informazioni sulla rete, come il tipo di rete, la sottorete, il gateway, il nome dei contenitori e gli indirizzi IP, ecc.
1.1 Creazione di una rete bridge definita dall'utente
Come ho già detto, quando avvii Docker, viene creata automaticamente una rete bridge predefinita . Tutti i contenitori appena avviati si collegheranno automaticamente ad esso. Tuttavia, puoi anche creare reti bridge personalizzate definite dall'utente.
Per creare un nuovo driver di rete, esegui semplicemente:
# docker network create my_net
Oppure,
# docker network create --driver bridge dhruv_net
Entrambi i comandi faranno lo stesso lavoro. Se non specifichi il nome del driver, verrà creato nel driver di rete predefinito, ovvero bridge .
Su reti definite dall'utente come dhruv_net, i container non solo possono comunicare tramite l'indirizzo IP, ma possono anche risolvere il nome di un container in un indirizzo IP. Questa funzionalità è chiamata scoperta automatica del servizio .
Per assicurarci che i container possano comunicare tra loro, eseguiamo tre container alpini, ovvero A1 , A2 e A3 su dhruv_net rete che abbiamo creato in precedenza.
# docker run -it -d --name A1 --network dhruv_net alpine ash
# docker run -it -d --name A2 --network dhruv_net alpine ash
# docker run -it -d --name A3 --network dhruv_net alpine ash
Ora prova a collegarti a uno qualsiasi dei contenitori e fai il ping agli altri due usando il nome del contenitore.
Dagli screenshot di cui sopra, è dimostrato che i container possono essere in grado di comunicare tra loro.
2. Rete ospitante
Stiamo eseguendo un container che si collega alla porta 80 utilizzando la rete host, l'applicazione del container è disponibile sulla porta 80 sull'indirizzo IP dell'host.
La rete host è necessaria solo quando si eseguono programmi con una rete molto specifica. L'applicazione in esecuzione all'interno del contenitore Docker sembra essere in esecuzione sull'host stesso, dal punto di vista della rete. Consente al contenitore un accesso alla rete maggiore di quello che può ottenere normalmente.
Qui abbiamo usato netstat -ntlp comando per visualizzare la porta di ascolto sul server. Per scoprire quale servizio è in ascolto su una porta particolare, questa guida .
Abbiamo trattato solo le basi dei concetti di rete Docker. Per maggiori dettagli, ti suggerisco di consultare la guida alla rete Docker allegata di seguito.
- Rete di container Docker
Lettura consigliata:
- Spiegazione dei volumi Docker
- Come aggiornare automaticamente i contenitori Docker in esecuzione
- ctop – Uno strumento di monitoraggio della riga di comando per i container Linux
- Portainer:il modo più semplice per gestire Docker
- PiCluster:una semplice applicazione di gestione Docker basata sul Web
- Dockly:gestisci i container Docker dal terminale
Informazioni sull'autore:
Dhruv Tiwari è un ingegnere DevOps che ama automatizzare le cose, lavorare con Linux su larga scala e sognare il giorno in cui i sistemi saranno abbastanza intelligenti da non dover mai accedere a una macchina Linux. Viaggio di CI/CD dal codice sorgente alla distribuzione del codice alla produzione.