5.1 Tipi principali di reti personalizzate
Le reti personalizzate in Docker offrono opzioni flessibili per configurare e gestire l'interazione di rete tra i container. Consentono di isolare i container, organizzare le loro interazioni e creare topologie di rete complesse. In questa lezione vedremo come creare e configurare reti personalizzate in Docker, oltre a esempi del loro utilizzo.
Tipi principali di reti personalizzate
Docker supporta diversi tipi di reti personalizzate, ognuna con le sue caratteristiche e destinata a diversi scenari di utilizzo:
-
Bridge (reti bridge): forniscono isolamento e connessione tra i container su uno stesso host. Questo tipo di rete è usato di default per le applicazioni locali che non devono interagire oltre l'host. -
Overlay (reti overlay): progettate per la connessione tra i container che lavorano su host diversi, in un cluster Docker Swarm o Kubernetes. Offrono alta scalabilità e sicurezza per applicazioni distribuite. -
Macvlan: permettono ai container di utilizzare direttamente l'interfaccia di rete fisica dell'host. Questo è utile per applicazioni di rete con requisiti elevati in termini di prestazioni, così come nei casi in cui è necessaria una connessione a indirizzi MAC specifici. I container nella rete Macvlan possono interagire con altri dispositivi nella rete fisica come nodi separati. -
Host (reti dell'host): i container utilizzano lo stack di rete dell'host, eliminando i costi aggiuntivi della virtualizzazione della rete, ma riducendo l'isolamento. Questo tipo di rete è adatto per applicazioni che richiedono la massima prestazione di rete.
5.2 Creazione e utilizzo delle reti bridge
Le reti bridge sono il tipo più comune di reti personalizzate e vengono utilizzate per isolare i container su un singolo host. I container connessi alla stessa rete bridge possono comunicare tra loro utilizzando gli indirizzi IP e i nomi host.
Creazione di una rete bridge personalizzata
Per creare una rete bridge personalizzata utilizza il comando docker network create:
docker network create --driver bridge my_bridge_network
Avviare container nella rete personalizzata
Avvia i container connessi alla rete creata:
docker run -d --name container1 --network my_bridge_network nginx
docker run -d --name container2 --network my_bridge_network busybox sleep 1000
Verifica della connessione tra i container
Puoi utilizzare il comando ping per verificare la connessione tra i container:
docker exec container2 ping -c 4 container1
Se i container sono correttamente connessi alla rete my_bridge_network, il comando ping avrà successo.
5.3 Reti personalizzate in Docker Compose
Esempi di utilizzo delle reti personalizzate in Docker Compose
Docker Compose semplifica la creazione e la gestione delle reti per applicazioni multi-contenitore. Puoi definire reti personalizzate nel file docker-compose.yml.
Esempio di file docker-compose.yml:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_bridge_network
app:
image: myapp:latest
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Esegui Docker Compose:
docker compose up -d
In questo esempio entrambi i servizi (web e app) sono connessi alla rete personalizzata my_bridge_network.
5.4 Configurazione e utilizzo delle reti macvlan
Le reti macvlan permettono ai container di utilizzare direttamente l'interfaccia di rete fisica dell'host, cosa che può essere utile per le applicazioni con requisiti elevati di performance di rete. I container in una rete di questo tipo ottengono indirizzi IP propri all'interno della sottorete specificata, rendendoli visibili nella stessa rete dell'host.
Creazione di una rete macvlan
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 my_macvlan_network
In questo comando:
--subnet: definisce la sottorete in cui si troveranno i container.--gateway: specifica il gateway per i container.-o parent: indica l'interfaccia di rete dell'host a cui è collegata la rete.
Avvio dei container nella rete macvlan
docker run -d --name container1 --network my_macvlan_network nginx
docker run -d --name container2 --network my_macvlan_network busybox sleep 1000
In questo esempio entrambi i container sono collegati alla rete my_macvlan_network e hanno accesso alla rete esterna attraverso l'interfaccia fisica eth0.
5.5 Esempi di utilizzo in Docker Compose
Puoi anche utilizzare reti macvlan in Docker Compose. Per esempio:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_macvlan_network
networks:
my_macvlan_network:
driver: macvlan
driver_opts:
parent: eth0
ipam:
config:
- subnet: 192.168.1.0/24
gateway: 192.168.1.1
Esegui Docker Compose:
docker compose up -d
In questo esempio, la rete my_macvlan_network permette al servizio web di interagire con i dispositivi nella sottorete 192.168.1.0/24, inclusa l'host.
Consigli pratici:
- Configurazione dell'accesso: Assicurati che il tuo router o l'amministratore di rete permetta l'uso della sottorete specificata nelle impostazioni
macvlan. - Isolamento: Se la sicurezza è importante, utilizza VLAN per segmentare la rete in modo che i container abbiano accesso solo alle risorse necessarie.
- Test: Dopo la configurazione, verifica la connettività tra i container e la rete esterna utilizzando i comandi
pingocurl.
5.6 Esempio di utilizzo delle reti per i microservizi
Vediamo un esempio, dove abbiamo un frontend, un backend e un database, che sono isolati in reti diverse, ma allo stesso tempo assicurano interazione attraverso l'interconnessione delle reti.
File docker-compose.yml
version: '3.8'
services:
frontend:
image: myfrontend:latest
networks:
- front-tier
- back-tier
backend:
image: mybackend:latest
networks:
- back-tier
- db-tier
database:
image: postgres:latest
environment:
POSTGRES_USER: utente
POSTGRES_PASSWORD: password
networks:
- db-tier
networks:
front-tier:
driver: bridge
back-tier:
driver: bridge
db-tier:
driver: bridge
Esegui Docker Compose:
docker compose up -d
In questo esempio:
- Il servizio
frontendè connesso alle retifront-tiereback-tier, il che gli permette di interagire sia con i client esterni che con il backend. - Il servizio
backendè connesso alle retiback-tieredb-tier, il che gli permette di interagire sia con il frontend che con il database. - Il servizio
databaseè connesso solo alla retedb-tier, il che garantisce l'isolamento del database da accessi esterni.
Consigli pratici:
- Usa l'isolamento: Dividere le reti aiuta a limitare l'accesso dei servizi ai database o ad altre risorse critiche.
- Verifica la connessione: Assicurati che i servizi possano interagire tra loro attraverso le reti comuni utilizzando i comandi
pingocurl. - Ottimizzazione: Utilizza la rete
overlayse il tuo progetto richiede un funzionamento in cluster o su più host.
Questo esempio illustra come creare isolamento di rete e allo stesso tempo garantire l'interazione tra diversi livelli dell'applicazione.
GO TO FULL VERSION