Padroneggiare il networking di Docker: dai bridge personalizzati alle architetture pronte per Swarm
Una guida pratica completa alle reti Docker, inclusi driver di rete, gestione IP, setup dell'overlay in Swarm e tuning delle prestazioni per sistemi containerizzati scalabili e sicuri.
Il networking è un concetto centrale nelle applicazioni containerizzate. Consente una comunicazione fluida tra tutti i container, i sistemi host e i servizi esterni. Le funzionalità di rete integrate di Docker sono fondamentali per isolare efficacemente i servizi, mettere in sicurezza i flussi di dati e orchestrare architetture a microservizi scalabili.
Uno degli strumenti più potenti in questo contesto è il comando Docker network create, che permette a ingegneri DevOps e sviluppatori di definire reti personalizzate su misura per le esigenze della loro applicazione.
Per questo oggi ti guiderò passo passo su come creare e gestire queste reti Docker in modo efficace.
Creare applicazioni moderne comporta in genere l'uso di diversi servizi in container separati e isolati. Il networking di Docker offre un modo flessibile e potente per connettere tra loro questi container e con sistemi esterni, tramite il modello di rete che preferisci, a prescindere dall'infrastruttura sottostante.
Questa sezione ti fornirà le nozioni di base sul networking di Docker, un componente chiave di Docker, e su come valutare quale configurazione di rete funziona per la tua applicazione. Ma prima di iniziare, se sei completamente nuovo a Docker, ti consiglio vivamente di consultareIntroduction to Docker per costruire solide basi prima di approfondire il networking di Docker.
Driver di rete: le fondamenta del networking di Docker
Docker utilizza driver di rete per specificare come i container si connettono e comunicano. Ogni driver definisce come gestirà il networking dei container. Di conseguenza, per ciascuno dei principali driver di rete di Docker ci sono livelli diversi di prestazioni, isolamento e complessità.
Panoramica dei driver di rete core di Docker
Ecco i principali driver integrati supportati da Docker:
Bridge: Il driver predefinito per i container standalone. Crea una rete interna isolata sull'host, consentendo ai container di comunicare tra loro usando IP o nomi dei container. Ideale per sviluppo e test su un singolo host.
Host: Rimuove l'isolamento condividendo lo stack di rete dell'host. Il container usa direttamente IP e porte dell'host. Utile per applicazioni ad alte prestazioni o per compatibilità con servizi a livello host.
None: Disabilita tutta la rete per il container. È disponibile solo l'interfaccia di loopback. Ottimo per container che non necessitano di connettività esterna o richiedono un isolamento di sicurezza rigoroso.
Overlay: Abilita la comunicazione tra container su host Docker diversi. Comunemente usato in Docker Swarm e in deployment multi-host. Crea una rete distribuita che astrae l'infrastruttura fisica sottostante.
Macvlan: Assegna un indirizzo MAC univoco a ciascun container, facendolo apparire come un dispositivo fisico sulla rete. Adatto ad applicazioni legacy che richiedono accesso diretto alla rete fisica.
IPvlan: Simile a macvlan, ma instrada il traffico a livello IP invece di usare gli indirizzi MAC. Offre prestazioni e controllo migliori in ambienti ad alta densità.
Ogni driver influisce su come i container interagiscono tra loro, con l'host e con le reti esterne.
Curioso di vedere come questi tipi di rete funzionano insieme? Il nostro corso Intermediate Docker tratta in dettaglio pratico il networking di Docker, i volumi e Compose. Capire queste differenze è fondamentale per progettare architetture sicure e performanti.
Quale tipo di rete dovrei usare?
La scelta del driver di rete giusto dipende dall'architettura della tua applicazione e dagli obiettivi operativi:
Bridge: Consigliato per la maggior parte degli scenari di sviluppo locale e per semplici applicazioni multi-container su un singolo host. Offre un buon equilibrio tra isolamento e facilità d'uso.
Host: Ideale quando i container devono collegarsi direttamente alla rete dell'host, ad esempio per esporre servizi su porte standard (ad es. porta 80 o 443). Fai attenzione a sicurezza e conflitti di porte.
None: Ideale per workload in sandbox o attività critiche per la sicurezza che non devono avere alcun accesso di rete. Comune in workflow automatizzati o test.
Overlay: Essenziale in ambienti cluster come Docker Swarm o Kubernetes, dove i container si estendono su più host. Abilita lo scaling orizzontale e il service discovery.
Macvlan: Preferibile quando i container devono comportarsi come dispositivi fisici sulla LAN. Usato in casi come sniffing di rete, integrazione di sistemi legacy o quando si vuole bypassare lo stack di rete di Docker.
IPvlan: Offre controllo granulare e prestazioni migliori rispetto a macvlan per ambienti con requisiti di rete stringenti, come telco o sistemi finanziari.
Considera fattori come topologia dell'host, esigenze di sicurezza e strategia di scalabilità quando scegli un driver di rete.
Se stai ancora decidendo quale rete si adatta al tuo carico di lavoro, scopri come Docker si confronta con Kubernetes in deployment reali con questa guida Kubernetes vs Docker.
Creare reti Docker personalizzate
Le reti Docker personalizzate ti permettono di controllare come i container comunicano internamente tra loro e con sistemi esterni, aiutandoti a isolare meglio i servizi, assegnare IP prevedibili o progettare l'architettura per prestazioni o sicurezza.
Questa sezione ti guiderà dalle basi alle funzionalità più avanzate nel processo di creazione di reti Docker personalizzate, inclusi i comandi e le configurazioni IP personalizzate.
Struttura di comando di base
Per creare una rete personalizzata, usa il comando docker network create. Questo ti permette di definire il driver di rete, la subnet e altre opzioni per un migliore controllo sulla comunicazione tra container.
Ecco un semplice esempio usando il driver predefinito bridge:
$ docker network create demo-network -d bridgeOfferto da
Questo comando crea una rete bridge chiamata demo-network. Docker restituisce un ID di rete univoco come conferma. A questo punto, la rete esiste ma non connette ancora alcun container.
Quando lavori con sistemi più grandi o policy di rete specifiche, Docker ti permette di gestire manualmente gli intervalli di indirizzi IP all'interno di reti personalizzate.
Puoi definire una subnet e un gateway usando i flag --subnet e --gateway:
La modalità Docker Swarm abilita il deployment orchestrato di servizi su un cluster di host Docker. Una parte critica di questa orchestrazione è il networking, che garantisce che i servizi in esecuzione su nodi diversi possano comunicare tra loro in modo fluido e sicuro.
Architetture di rete compatibili con Swarm
Docker Swarm è la soluzione di clustering nativa di Docker che trasforma un insieme di host Docker in un unico motore virtuale. Ti consente di distribuire e gestire i container come servizi distribuiti. Uno dei suoi punti di forza è il networking multi-host, che permette ai servizi su macchine diverse di comunicare come se fossero sullo stesso host.
Il networking di Swarm supporta due tipi principali di traffico:
Traffico del control plane – comunicazione di gestione crittografata tra i nodi Docker.
Traffico del data plane – comunicazione container-to-container e accesso ai servizi esterni.
Swarm usa reti overlay per supportare la comunicazione tra nodi dei servizi e il routing mesh per bilanciare il carico del traffico esterno tra le repliche dei servizi.
Creare reti in Swarm
Per supportare il service discovery e la comunicazione sicura multi-host, Docker Swarm utilizza reti overlay con scope swarm. Possono essere create manualmente o automaticamente all'avvio dei servizi.
Ecco come creare una rete overlay con scope swarm:
--subnet e --gateway definiscono la topologia della rete.
--opt encrypted abilita la crittografia IPSEC per il traffico dei container.
--scope swarm viene applicato automaticamente con il driver overlay in modalità swarm.
Comprendere i flag --scope e --attachable
--scope swarm: Indica che la rete è disponibile su tutti i nodi dello swarm. Solo i servizi di swarm (non i container standalone) possono usare questa rete a meno che non sia specificato --attachable.
--attachable: Consente ai container standalone di unirsi a una rete con scope swarm. Utile per debugging o accessi temporanei dei container.
Ad esempio:
$ docker network create \--driver overlay \--attachable\
my-dev-overlayOfferto da
Questo ti permette di collegare alla rete di swarm anche container regolari, oltre ai servizi.
Configurazione e validazione della rete
Devi assicurarti che le tue reti Docker siano configurate correttamente per comunicare in modo appropriato tra i container, fornire la sicurezza necessaria e servizi performanti. Docker dispone di diversi strumenti e comandi per rivedere, risolvere problemi e convalidare le configurazioni di rete.
Verifica della configurazione di rete
Per esaminare i dettagli di configurazione di qualsiasi rete Docker, usa il comando docker network inspect. Riceverai un output JSON dettagliato che include:
Driver di rete (bridge, overlay, ecc.)
Configurazione di subnet e gateway
Scope (local, swarm)
Container connessi e i loro indirizzi IP
Accesso interno o esterno
Opzioni specifiche del driver (ad es. ID VXLAN per reti overlay)
"Driver": garantisce che sia stato creato il tipo di rete previsto.
"IPAM": conferma le impostazioni di gestione degli indirizzi IP, incluse subnet o gateway personalizzati.
"Containers": mostra quali container sono collegati e gli IP assegnati.
"Options": visualizza configurazioni avanzate come la crittografia (encrypted: true) o la dimensione MTU.
Tecniche di validazione
Per confermare che la rete funzioni come previsto:
Per prima cosa devi verificare la configurazione IPAM. Controlla la sezione "IPAM" nell'output di Docker network inspect. Assicurati che subnet e gateway corrispondano alla configurazione desiderata. Subnet mal configurate possono causare problemi di connettività o conflitti di IP.
Poi controlla gli identificatori VXLAN (solo Overlay). Le reti overlay usano VXLAN per incapsulare il traffico dei container su più host. Ispeziona la sezione "Options" per chiavi come:
"com.docker.network.driver.overlay.vxlanid_list":"4097"Offerto da
Questo conferma che il tunnel VXLAN è attivo e correttamente configurato. Se assente o errato, i servizi potrebbero non essere raggiungibili tra i nodi.
Infine, testa la connettività tra container. Da un container, prova a fare ping o ad accedere a un altro per nome o IP. Questo conferma che la risoluzione DNS e l'instradamento interno funzionano:
$ dockerexec-it container1 ping container2Offerto da
Controlla il comportamento del DNS
I container connessi a reti definite dall'utente usano il DNS embedded di Docker. Per confermarlo, ispeziona /etc/resolv.conf all'interno del container e testa la risoluzione dei nomi dei servizi.
Convalida l'instradamento del gateway
Per i container su più reti, Docker seleziona il gateway predefinito in base alla gw-priority più alta. Per imporre l'instradamento corretto, assegna priorità esplicite durante la creazione del container:
$ docker run --networkname=public,gw-priority=1--network private mycontainerOfferto da
Usa log e strumenti diagnostici
Monitora i log dei container per errori di connettività e usa strumenti come curl, dig e ip a all'interno dei container per il debugging a basso livello.
In sintesi, convalidare le configurazioni di rete Docker aiuta a garantire una comunicazione fluida tra container e riduce al minimo i guasti imprevisti nelle applicazioni multi-servizio.
E questo ci porta alla sezione seguente.
Sicurezza e ottimizzazione delle prestazioni
Il networking reale dei container non consiste solo nell'abilitare la comunicazione. In molti casi, fornisce il necessario isolamento garantendo al contempo le massime prestazioni. Quando metti in sicurezza la tua architettura ed eroghi un servizio, segmentazione e throughput possono aiutarti a farlo.
Strategie di segmentazione della rete
La segmentazione della rete è una pratica fondamentale e un metodo di sicurezza per le applicazioni containerizzate. Assegnando i container a reti Docker distinte, puoi separare le preoccupazioni trasversali come la segmentazione per servizi con frontend, backend e database. Questo consente una mitigazione proattiva del rischio contro esposizione e potenziali attacchi.
Puoi sfruttare le reti definite dall'utente per gestire i confini di comunicazione. I container in reti diverse non possono comunicare tra loro a meno che non li colleghi esplicitamente. Ad esempio, se metti il tuo container del database su una rete solo interna, i servizi esposti pubblicamente non possono accedervi direttamente.
Regole e controlli firewall integrati
Per impostazione predefinita, Docker implementa regole iptables per limitare i punti di comunicazione tra i container e il mondo esterno.
Alcuni modi per estendere questa segmentazione includono:
Disabilitare la comunicazione tra container sulla rete bridge predefinita:
Aggiungi questo al daemon.json del demone Docker per impedire ai container di comunicare a meno che non siano sulla stessa rete definita dall'utente.
Limitare capacità e privilegi usando flag come --cap-drop, --read-only e --no-new-privileges.
Usare reti overlay in modalità Swarm per comunicazioni di servizio crittografate e con scope su più host.
Tecniche di ottimizzazione delle prestazioni
Ci sono diversi modi per migliorare le prestazioni ottimizzando con Docker.
Migliorare il throughput di rete
La scelta del driver di rete giusto ha un impatto diretto sulle prestazioni. Ad esempio:
Usa il driver host quando sono essenziali latenza bassa e alto throughput, e l'isolamento di rete non è una priorità.
Preferisci bridge per ambienti locali e isolati.
Usa macvlan quando i container devono comportarsi come dispositivi fisici sulla tua rete.
Evita di sovraccaricare la rete bridge predefinita e crea reti separate per servizi pesanti o raggruppamenti logici.
Profilazione delle prestazioni con iperf3 e metriche
Per misurare le prestazioni di rete, usa strumenti di profilazione comeiperf3:
# Start server in container1docker run -it--rm--name server --network my-net networkstatic/iperf3 -s# Run client in container2docker run -it--rm--network my-net networkstatic/iperf3 -c serverOfferto da
Puoi anche monitorare le statistiche di rete usando:
docker stats – CPU, memoria e I/O di rete in tempo reale.
Prometheus + cAdvisor – Per metriche a serie temporali e monitoraggio a lungo termine.
Script o agent personalizzati che esportano le metriche di /proc/net/dev dall'interno dei container.
La profilazione regolare aiuta a individuare i colli di bottiglia in anticipo e a guidare le decisioni su posizionamento dei container, scelta del driver o upgrade della rete dell'host.
Risoluzione dei problemi di rete
Anche con le best practice, possono sorgere problemi di rete. Diagnosticarli e risolverli rapidamente è fondamentale per mantenere l'uptime dei servizi. Questa sezione fornisce strumenti e tecniche per identificare e correggere i problemi comuni di networking in Docker.
Diagnosticare i problemi di rete
Un container minimale potrebbe non avere strumenti come ping, dig o netstat, rendendo difficile la risoluzione dei problemi. Invece di modificare il container, avviane uno nuovo che condivida il suo namespace di rete:
docker run -it--network container:my-container alpineOfferto da
Poi installa gli strumenti di rete:
apk add --no-cache iproute2 bind-tools net-toolsOfferto da
In alternativa, usa nicolaka/netshoot, un'immagine pensata appositamente e ricca di strumenti diagnostici:
docker run -it--rm--network container:my-container nicolaka/netshootOfferto da
Strumenti come ip, nslookup, netstat e traceroute ti aiuteranno a identificare problemi di instradamento o DNS.
Risoluzione dei problemi di connettività
Alcune cause comuni e le relative soluzioni:
Errori di risoluzione DNS: Assicurati che il container sia su una rete definita dall'utente per beneficiare del DNS embedded di Docker. Controlla /etc/resolv.conf e usa dig o nslookup per testare la risoluzione dei nomi.
Mismatch di MTU: I container su reti o host diversi potrebbero subire drop di pacchetti a causa di MTU non allineate. Riduci la MTU nelle reti overlay se viene usato il tunneling:
docker network create --driver overlay --optcom.docker.network.driver.mtu=1200 my-overlayOfferto da
Subnet in conflitto
Evita sovrapposizioni di subnet tra reti Docker o con le reti fisiche del tuo host. Usa --subnet per definire intervalli non in conflitto.
Porte bloccate dal firewall dell'host
Assicurati che le porte richieste da Docker siano aperte:
2377 (gestione Swarm)
7946 TCP/UDP (scoperta dei container)
4789 UDP (dati overlay)
Una risoluzione efficace dei problemi combina diagnostica e una solida comprensione di come i container interagiscono con le loro reti. Con gli strumenti e l'approccio giusti, la maggior parte dei problemi può essere isolata e risolta in pochi minuti.
Conclusioni
Il Docker Networking è un componente fondamentale delle architetture containerizzate, che abilita comunicazioni sicure, efficienti e scalabili tra i servizi, che siano in esecuzione su un singolo host o su un cluster distribuito.
Con il supporto integrato a vari driver di rete, una gestione IP personalizzabile e reti overlay native di Swarm, Docker consente a sviluppatori e team DevOps di isolare i workload, controllare i flussi di dati e ottimizzare le prestazioni in ambienti complessi.
Non è una soluzione valida per tutti, ma se usato con criterio offre funzionalità robuste per costruire microservizi moderni, pipeline di automazione e sistemi distribuiti sicuri.
Vuoi continuare a migliorare le tue competenze su Docker e la containerizzazione?
Ecco alcune risorse altamente consigliate per proseguire nel tuo percorso di apprendimento:
Serve a definire e configurare reti Docker personalizzate, consentendo ai container di comunicare in modo sicuro ed efficiente.
Quali sono i principali tipi di driver di rete Docker?⌄
I driver principali includono bridge, host, none, overlay, macvlan e ipvlan, ciascuno con diversi livelli di isolamento e connettività.
Quando dovrei usare una rete overlay in Docker?⌄
Le reti overlay sono ideali per la comunicazione multi-host, soprattutto in ambienti Docker Swarm o Kubernetes.
Come posso verificare se una rete Docker è configurata correttamente?⌄
Usa Docker network inspect, verifica le impostazioni IPAM e VXLAN e testa la connettività tra container con ping o strumenti DNS.
Quali strumenti aiutano a diagnosticare i problemi di networking in Docker? ⌄
Strumenti come nicolaka/netshoot, dig, nslookup, iperf3 e i log dei container sono utili per diagnosticare problemi comuni come errori DNS o mismatch di MTU.
Josep è un Data Scientist freelance specializzato in progetti europei, con competenze in archiviazione e processamento dei dati, analisi avanzate e data storytelling efficace.
Come docente, insegna Big Data nel corso di laurea magistrale dell’Università di Navarra e condivide le sue idee tramite articoli su piattaforme come Medium, KDNuggets e DataCamp. Josep scrive anche di Data e Tech nella sua newsletter Databites (databites.tech).
Ha conseguito una laurea in Ingegneria Fisica presso la Università Politecnica della Catalogna e un master in Intelligent Interactive Systems presso la Università Pompeu Fabra.
Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Il networking è un concetto centrale nelle applicazioni containerizzate. Consente una comunicazione fluida tra tutti i container, i sistemi host e i servizi esterni. Le funzionalità di rete integrate di Docker sono fondamentali per isolare efficacemente i servizi, mettere in sicurezza i flussi di dati e orchestrare architetture a microservizi scalabili.
Uno degli strumenti più potenti in questo contesto è il comando Docker network create, che permette a ingegneri DevOps e sviluppatori di definire reti personalizzate su misura per le esigenze della loro applicazione.
Per questo oggi ti guiderò passo passo su come creare e gestire queste reti Docker in modo efficace.
Se sei alle prime armi con Docker, dai un'occhiata al nostro percorso di competenze su Containerization and Virtualization with Docker and Kubernetes per fare un po' di pratica.
Che cos'è il Docker Networking?
Creare applicazioni moderne comporta in genere l'uso di diversi servizi in container separati e isolati. Il networking di Docker offre un modo flessibile e potente per connettere tra loro questi container e con sistemi esterni, tramite il modello di rete che preferisci, a prescindere dall'infrastruttura sottostante.
Questa sezione ti fornirà le nozioni di base sul networking di Docker, un componente chiave di Docker, e su come valutare quale configurazione di rete funziona per la tua applicazione. Ma prima di iniziare, se sei completamente nuovo a Docker, ti consiglio vivamente di consultare Introduction to Docker per costruire solide basi prima di approfondire il networking di Docker.
Driver di rete: le fondamenta del networking di Docker
Docker utilizza driver di rete per specificare come i container si connettono e comunicano. Ogni driver definisce come gestirà il networking dei container. Di conseguenza, per ciascuno dei principali driver di rete di Docker ci sono livelli diversi di prestazioni, isolamento e complessità.
Panoramica dei driver di rete core di Docker
Ecco i principali driver integrati supportati da Docker:
Ogni driver influisce su come i container interagiscono tra loro, con l'host e con le reti esterne.
Curioso di vedere come questi tipi di rete funzionano insieme? Il nostro corso Intermediate Docker tratta in dettaglio pratico il networking di Docker, i volumi e Compose. Capire queste differenze è fondamentale per progettare architetture sicure e performanti.
Quale tipo di rete dovrei usare?
La scelta del driver di rete giusto dipende dall'architettura della tua applicazione e dagli obiettivi operativi:
Considera fattori come topologia dell'host, esigenze di sicurezza e strategia di scalabilità quando scegli un driver di rete.
Se stai ancora decidendo quale rete si adatta al tuo carico di lavoro, scopri come Docker si confronta con Kubernetes in deployment reali con questa guida Kubernetes vs Docker.
Creare reti Docker personalizzate
Le reti Docker personalizzate ti permettono di controllare come i container comunicano internamente tra loro e con sistemi esterni, aiutandoti a isolare meglio i servizi, assegnare IP prevedibili o progettare l'architettura per prestazioni o sicurezza.
Questa sezione ti guiderà dalle basi alle funzionalità più avanzate nel processo di creazione di reti Docker personalizzate, inclusi i comandi e le configurazioni IP personalizzate.
Struttura di comando di base
Per creare una rete personalizzata, usa il comando docker network create. Questo ti permette di definire il driver di rete, la subnet e altre opzioni per un migliore controllo sulla comunicazione tra container.
Ecco un semplice esempio usando il driver predefinito bridge:
Questo comando crea una rete bridge chiamata demo-network. Docker restituisce un ID di rete univoco come conferma. A questo punto, la rete esiste ma non connette ancora alcun container.
Puoi visualizzare le reti esistenti con:
Per connettere un container alla nuova rete, usa il flag --network:
Per aggiungere una rete a un container esistente:
E per rimuoverla:
Infine, quando la rete non serve più, puoi rimuoverla:
Per ripulire tutte le reti non utilizzate:
Gestione avanzata degli indirizzi IP
Quando lavori con sistemi più grandi o policy di rete specifiche, Docker ti permette di gestire manualmente gli intervalli di indirizzi IP all'interno di reti personalizzate.
Puoi definire una subnet e un gateway usando i flag
--subnete--gateway:Per un controllo ancora maggiore, usa:
--ip-range: Assegna un pool di IP da cui i container possono attingere dinamicamente, separato dall'intera subnet.--aux-address: Riserva indirizzi IP specifici all'interno della subnet per sistemi esterni o per documentazione.Ad esempio:
Questa configurazione:
Se ti servono esempi più guidati, puoi esplorare strategie di setup avanzate in 10 Docker Project Ideas: From Beginner to Advanced.
Networking in modalità Swarm
La modalità Docker Swarm abilita il deployment orchestrato di servizi su un cluster di host Docker. Una parte critica di questa orchestrazione è il networking, che garantisce che i servizi in esecuzione su nodi diversi possano comunicare tra loro in modo fluido e sicuro.
Architetture di rete compatibili con Swarm
Docker Swarm è la soluzione di clustering nativa di Docker che trasforma un insieme di host Docker in un unico motore virtuale. Ti consente di distribuire e gestire i container come servizi distribuiti. Uno dei suoi punti di forza è il networking multi-host, che permette ai servizi su macchine diverse di comunicare come se fossero sullo stesso host.
Il networking di Swarm supporta due tipi principali di traffico:
Swarm usa reti overlay per supportare la comunicazione tra nodi dei servizi e il routing mesh per bilanciare il carico del traffico esterno tra le repliche dei servizi.
Creare reti in Swarm
Per supportare il service discovery e la comunicazione sicura multi-host, Docker Swarm utilizza reti overlay con scope
swarm. Possono essere create manualmente o automaticamente all'avvio dei servizi.Ecco come creare una rete overlay con scope swarm:
Questa rete non è limitata a un singolo host; qualsiasi nodo che partecipa allo swarm può connettervi dei container. Puoi ispezionarla con:
Personalizzare le reti Overlay
Le reti overlay supportano configurazioni avanzate, ad esempio:
--subnete--gatewaydefiniscono la topologia della rete.--opt encryptedabilita la crittografia IPSEC per il traffico dei container.--scope swarmviene applicato automaticamente con il driver overlay in modalità swarm.Comprendere i flag --scope e --attachable
--scope swarm: Indica che la rete è disponibile su tutti i nodi dello swarm. Solo i servizi di swarm (non i container standalone) possono usare questa rete a meno che non sia specificato--attachable.--attachable: Consente ai container standalone di unirsi a una rete con scope swarm. Utile per debugging o accessi temporanei dei container.Ad esempio:
Questo ti permette di collegare alla rete di swarm anche container regolari, oltre ai servizi.
Configurazione e validazione della rete
Devi assicurarti che le tue reti Docker siano configurate correttamente per comunicare in modo appropriato tra i container, fornire la sicurezza necessaria e servizi performanti. Docker dispone di diversi strumenti e comandi per rivedere, risolvere problemi e convalidare le configurazioni di rete.
Verifica della configurazione di rete
Per esaminare i dettagli di configurazione di qualsiasi rete Docker, usa il comando docker network inspect. Riceverai un output JSON dettagliato che include:
bridge,overlay, ecc.)local,swarm)Ad esempio, potresti fare qualcosa del genere:
Cerca campi chiave come:
Tecniche di validazione
Per confermare che la rete funzioni come previsto:
Questo conferma che il tunnel VXLAN è attivo e correttamente configurato. Se assente o errato, i servizi potrebbero non essere raggiungibili tra i nodi.
Controlla il comportamento del DNS
I container connessi a reti definite dall'utente usano il DNS embedded di Docker. Per confermarlo, ispeziona /etc/resolv.conf all'interno del container e testa la risoluzione dei nomi dei servizi.
Convalida l'instradamento del gateway
Per i container su più reti, Docker seleziona il gateway predefinito in base alla gw-priority più alta. Per imporre l'instradamento corretto, assegna priorità esplicite durante la creazione del container:
Usa log e strumenti diagnostici
Monitora i log dei container per errori di connettività e usa strumenti come curl, dig e ip a all'interno dei container per il debugging a basso livello.
In sintesi, convalidare le configurazioni di rete Docker aiuta a garantire una comunicazione fluida tra container e riduce al minimo i guasti imprevisti nelle applicazioni multi-servizio.
E questo ci porta alla sezione seguente.
Sicurezza e ottimizzazione delle prestazioni
Il networking reale dei container non consiste solo nell'abilitare la comunicazione. In molti casi, fornisce il necessario isolamento garantendo al contempo le massime prestazioni. Quando metti in sicurezza la tua architettura ed eroghi un servizio, segmentazione e throughput possono aiutarti a farlo.
Strategie di segmentazione della rete
La segmentazione della rete è una pratica fondamentale e un metodo di sicurezza per le applicazioni containerizzate. Assegnando i container a reti Docker distinte, puoi separare le preoccupazioni trasversali come la segmentazione per servizi con frontend, backend e database. Questo consente una mitigazione proattiva del rischio contro esposizione e potenziali attacchi.
Puoi sfruttare le reti definite dall'utente per gestire i confini di comunicazione. I container in reti diverse non possono comunicare tra loro a meno che non li colleghi esplicitamente. Ad esempio, se metti il tuo container del database su una rete solo interna, i servizi esposti pubblicamente non possono accedervi direttamente.
Regole e controlli firewall integrati
Per impostazione predefinita, Docker implementa regole iptables per limitare i punti di comunicazione tra i container e il mondo esterno.
Alcuni modi per estendere questa segmentazione includono:
daemon.jsondel demone Docker per impedire ai container di comunicare a meno che non siano sulla stessa rete definita dall'utente.--cap-drop,--read-onlye--no-new-privileges.Tecniche di ottimizzazione delle prestazioni
Ci sono diversi modi per migliorare le prestazioni ottimizzando con Docker.
Migliorare il throughput di rete
La scelta del driver di rete giusto ha un impatto diretto sulle prestazioni. Ad esempio:
Evita di sovraccaricare la rete bridge predefinita e crea reti separate per servizi pesanti o raggruppamenti logici.
Profilazione delle prestazioni con iperf3 e metriche
Per misurare le prestazioni di rete, usa strumenti di profilazione come iperf3:
Puoi anche monitorare le statistiche di rete usando:
docker stats– CPU, memoria e I/O di rete in tempo reale./proc/net/devdall'interno dei container.La profilazione regolare aiuta a individuare i colli di bottiglia in anticipo e a guidare le decisioni su posizionamento dei container, scelta del driver o upgrade della rete dell'host.
Risoluzione dei problemi di rete
Anche con le best practice, possono sorgere problemi di rete. Diagnosticarli e risolverli rapidamente è fondamentale per mantenere l'uptime dei servizi. Questa sezione fornisce strumenti e tecniche per identificare e correggere i problemi comuni di networking in Docker.
Diagnosticare i problemi di rete
Un container minimale potrebbe non avere strumenti come ping, dig o netstat, rendendo difficile la risoluzione dei problemi. Invece di modificare il container, avviane uno nuovo che condivida il suo namespace di rete:
Poi installa gli strumenti di rete:
In alternativa, usa nicolaka/netshoot, un'immagine pensata appositamente e ricca di strumenti diagnostici:
Strumenti come ip, nslookup, netstat e traceroute ti aiuteranno a identificare problemi di instradamento o DNS.
Risoluzione dei problemi di connettività
Alcune cause comuni e le relative soluzioni:
Subnet in conflitto
Evita sovrapposizioni di subnet tra reti Docker o con le reti fisiche del tuo host. Usa
--subnetper definire intervalli non in conflitto.Porte bloccate dal firewall dell'host
Assicurati che le porte richieste da Docker siano aperte:
Una risoluzione efficace dei problemi combina diagnostica e una solida comprensione di come i container interagiscono con le loro reti. Con gli strumenti e l'approccio giusti, la maggior parte dei problemi può essere isolata e risolta in pochi minuti.
Conclusioni
Il Docker Networking è un componente fondamentale delle architetture containerizzate, che abilita comunicazioni sicure, efficienti e scalabili tra i servizi, che siano in esecuzione su un singolo host o su un cluster distribuito.
Con il supporto integrato a vari driver di rete, una gestione IP personalizzabile e reti overlay native di Swarm, Docker consente a sviluppatori e team DevOps di isolare i workload, controllare i flussi di dati e ottimizzare le prestazioni in ambienti complessi.
Non è una soluzione valida per tutti, ma se usato con criterio offre funzionalità robuste per costruire microservizi moderni, pipeline di automazione e sistemi distribuiti sicuri.
Vuoi continuare a migliorare le tue competenze su Docker e la containerizzazione?
Ecco alcune risorse altamente consigliate per proseguire nel tuo percorso di apprendimento: