saverioriotto.it

Networking in Docker e comandi più utilizzati dai sviluppatori

Docker è il modello di fatto per la creazione e l'esecuzione di container su larga scala nella maggior parte delle organizzazioni aziendali odierne. Semplifica la creazione di pacchetti, consentendo di incapsulare tali servizi in container. In questo articolo, ci concentreremo sull'aspetto di rete di Docker.

Networking in Docker e comandi più utilizzati dai sviluppatori

Il networking di Docker, come il networking in generale, riguarda la comunicazione tra processi. La rete Docker viene utilizzata principalmente per stabilire la comunicazione tra i container Docker e il mondo esterno tramite il computer host in cui è in esecuzione il daemon Docker.

La rete Docker differisce dalla rete della macchina virtuale (VM) o della macchina fisica in alcuni aspetti:

Le macchine virtuali sono in qualche modo più flessibili in quanto possono supportare configurazioni come NAT e rete host. Docker in genere utilizza una rete bridge e, sebbene possa supportare la rete host, tale opzione è disponibile solo su Linux.

Quando si utilizzano i container Docker, l'isolamento della rete viene ottenuto utilizzando uno spazio dei nomi di rete, non uno stack di rete completamente separato.

Puoi eseguire centinaia di container su un host Docker a singolo nodo, quindi è necessario che l'host possa supportare la rete su larga scala. Le macchine virtuali in genere non raggiungono questi limiti di rete poiché in genere eseguono meno processi.

Cosa sono i driver di rete Docker?

Docker gestisce la comunicazione tra i container creando una rete bridge predefinita, quindi spesso non devi occuparti della rete e puoi invece concentrarti sulla creazione e l'esecuzione dei container. Questa rete bridge predefinita funziona nella maggior parte dei casi, ma non è l'unica opzione disponibile.

Docker ti consente di creare diversi tipi di driver di rete pronti all'uso: bridge, host, overlay, macvlan e none. Tuttavia, potrebbero non adattarsi a tutti i casi d'uso, quindi esploreremo anche reti definite dall'utente come overlay e macvlan. Diamo un'occhiata più da vicino a ciascuno di essi:

Bridge: crea una rete interna all'interno di un singolo host Docker. I container  inseriti all'interno di questa rete possono comunicare tra loro ma sono isolati solo dai container e non dalla rete interna. Il driver bridge è predefinito quando si eseguono singoli container o quando si utilizza docker-compose.

Host: quando si utilizza il driver host, il contenitore condivide lo stack di rete dell'host Docker, apparendo come se il contenitore fosse l'host stesso, dal punto di vista della rete, il che significa che utilizzando questo driver di rete un utente non sarà in grado di eseguire più container sullo stesso host

NOTA: al momento il driver host è supportato solo su Linux.

None: disabilita semplicemente la rete per un contenitore, isolandolo dagli altri contenitori. Questa opzione viene utilizzata quando un utente desidera disabilitare l'accesso di rete a un contenitore

In termini semplici, None è chiamata interfaccia di loopback, il che significa che non ha interfacce di rete esterne.

Overlay: crea una rete distribuita che può estendersi su più host Docker e pertanto è il driver preferito per la gestione della comunicazione del contenitore all'interno di un cluster multi-host. Overlay è il driver predefinito per i servizi Swarm di Docker.

Macvlan: assegna un indirizzo MAC al container  Docker. Con questo indirizzo Mac, il server Docker (daemon) indirizza il traffico di rete a un router. È adatto quando un utente desidera connettere direttamente il contenitore alla rete fisica anziché all'host Docker.

Comandi di base per configurare le reti in Docker

Vediamo alcuni degli importanti comandi di rete ampiamente utilizzati dai team di sviluppatori.

Elenco reti configurate su Docker:

docker network ls

Connettere un container in esecuzione a una rete:

docker network connect multi-host-network container

Assegnare indirizzo IP specifico ad un container:

docker network connect --IP 10.10.36.122 container multi-host-network

Creare un alias di rete per un container:

docker network connect --alias web multi-host-network container

Disconnettere un container da una rete:

docker network disconnect multi-host-network container

Rimuovere una rete:

docker network rm nome_rete

Rimuovere tutte le reti inutilizzate contemporaneamente:

docker network prune

Conclusione

In questo articolo abbiamo visto come funziona il networking in Docker e come far comunicare due, o più, container. Abbiamo appreso cos'è il Networking Docker, alcuni dei suoi vantaggi, i driver di rete e, infine, abbiamo visto alcuni dei comandi di rete Docker di base. Maggiori dettagli li trovi sulla guida ufficiale docker cliccando quì.

Adesso non ti rimane altro che metterti a lavoro e sperimentare!




Commenti
* Obbligatorio