3.1 Fondamenti di rete bridge
La rete bridge
è il network driver predefinito in Docker e viene utilizzato per creare una rete isolata in cui i container possono interagire tra di loro. Questa rete consente ai container di comunicare tramite indirizzi IP e nomi host, offrendo un modo pratico per organizzare l'interazione tra i vari componenti di applicazioni multi-container.
La rete bridge
crea una rete privata interna a livello dell'host, isolata dalla rete esterna dell'host. I container collegati a questa rete possono interagire tra loro, ma non sono direttamente accessibili dall'esterno senza configurare il port forwarding.
Creazione automatica della rete bridge
Per impostazione predefinita, Docker crea la rete bridge
all'installazione, e i container avviati senza specificare una rete particolare vengono automaticamente connessi a questa rete.
Esempio di creazione e utilizzo di container nella rete bridge
1. Avvio dei container nella rete bridge
:
In questo esempio avviamo due container: container1 con Nginx e container2 con Busybox. Entrambi i container sono collegati alla rete bridge predefinita.
docker run -d --name container1 nginx
docker run -d --name container2 busybox sleep 1000
2. Verifica degli indirizzi IP dei container:
Per verificare gli indirizzi IP dei container, utilizza il comando docker inspect.
Questi comandi mostreranno gli indirizzi IP dei container, che possono essere utilizzati per stabilire la connessione tra di loro.
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container1
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container2
3. Comunicazione tra container tramite indirizzo IP:
Per verificare la comunicazione tra i container, utilizza il comando ping
dal container container2
per effettuare il ping a container1
.
Se i container sono correttamente collegati alla rete bridge
, il comando ping
avrà successo.
docker exec container2 ping -c 4 <IP_ADDRESS_OF_CONTAINER1>
Spiegazione: La rete bridge
fornisce una soluzione semplice per applicazioni locali in cui i container devono interagire tra loro restando isolati dalla rete esterna. Il ping tramite indirizzo IP è un modo di base per verificare la connessione di rete, tuttavia per applicazioni più complesse potrebbe essere necessaria la configurazione di DNS o di driver di rete aggiuntivi.
3.2 Uso dei nomi host
Uso dei nomi host per connettere i container
Oltre agli indirizzi IP, Docker permette anche di usare i nomi dei container per connettersi tra di loro. Questo semplifica la configurazione, poiché i nomi dei container rimangono costanti, a differenza degli indirizzi IP che possono cambiare in caso di riavvio dei container.
Esempio di connessione tramite nome host
1. Avvio dei container specificando la rete bridge
:
docker run -d --name webserver --network bridge nginx
docker run -d --name appserver --network bridge busybox sleep 1000
2. Verifica della connessione tramite nome host:
Usa il comando ping
dal container appserver
per fare il ping al webserver
:
docker exec appserver ping -c 4 webserver
Creazione di una rete bridge
personalizzata
Invece di usare la rete bridge
predefinita, puoi creare una rete bridge
personalizzata per avere un controllo migliore sull'interazione tra i container.
Esempio di creazione di una rete personalizzata
1. Creazione di una rete personalizzata:
docker network create --driver bridge my_bridge_network
2. Avvio dei container nella rete personalizzata:
docker run -d --name webserver --network my_bridge_network nginx
docker run -d --name appserver --network my_bridge_network busybox sleep 1000
3. Verifica della connessione tramite nome host:
docker exec appserver ping -c 4 webserver
3.3 Esempi con più host
Esempi di utilizzo pratico
Esempio 1: Web server e database
Crea un file docker-compose.yml
per il web server e il database:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_bridge_network
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Avvia Docker Compose:
docker compose up -d
Verifica il collegamento tra i container:
docker compose exec web ping -c 4 db
Esempio 2: Architettura a microservizi
Crea un file docker-compose.yml
per un'applicazione a microservizi:
version: '3.8'
services:
frontend:
image: nginx:latest
networks:
- my_bridge_network
backend:
image: mybackend:latest
networks:
- my_bridge_network
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Avvia Docker Compose
:
docker compose up -d
Verifica il collegamento tra i container:
docker compose exec backend ping -c 4 db
docker compose exec frontend ping -c 4 backend
GO TO FULL VERSION