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.
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.
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
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!