CodeGym /Corsi /Docker SELF /Relazione tra i container

Relazione tra i container

Docker SELF
Livello 17 , Lezione 2
Disponibile

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.

Terminale

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.

Terminale

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.

Terminale

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:

Terminale

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:

Terminale

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:

Terminale

docker network create --driver bridge my_bridge_network 
    

2. Avvio dei container nella rete personalizzata:

Terminale

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:

Terminale

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:

Yaml

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:

Terminal


docker compose up -d 

Verifica il collegamento tra i container:

Terminal


docker compose exec web ping -c 4 db 

Esempio 2: Architettura a microservizi

Crea un file docker-compose.yml per un'applicazione a microservizi:

Yaml

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:

Terminal

        
docker compose up -d 

Verifica il collegamento tra i container:

Terminal

docker compose exec backend ping -c 4 db

docker compose exec frontend ping -c 4 backend 
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION