CodeGym /Corsi /Docker SELF /Montaggio di volumi e reti

Montaggio di volumi e reti

Docker SELF
Livello 16 , Lezione 1
Disponibile

7.1 Montaggio dei volumi

Montare volumi e reti in Docker Compose consente di creare applicazioni multicontainer flessibili ed efficaci. I volumi (volumes) vengono utilizzati per archiviare i dati che devono rimanere al di fuori dei container, mentre le reti (networks) permettono l'interazione tra container. In questa lezione vedremo in dettaglio come utilizzare volumi e reti in Docker Compose.

I volumi in Docker permettono di salvare i dati al di fuori dei container, assicurando la loro disponibilità anche dopo l'arresto o l'eliminazione dei container. Questo è particolarmente utile per conservare dati di database, file di log e altri dati che devono essere a lungo termine.

Tipi di volumi:

  • Volumi nominati (Named Volumes): gestiti da Docker e salvati in una directory speciale sull'host.
  • Volumi collegati (Bind Mounts): montati nel container da una directory specificata sull'host.

Definizione dei volumi in Docker Compose

Esempio di volumi nominati

In questo esempio è stato creato un volume nominato postgres-data, che viene montato nella directory /var/lib/postgresql/data all'interno del container db.

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  postgres-data:

Esempio di volumi collegati

In questo esempio, le directory e i file locali nginx.conf e html vengono montati nel container web come volumi collegati.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/usr/share/nginx/html
<

7.2 Montaggio delle reti

Le reti in Docker Compose permettono ai container di interagire tra di loro. Ogni container può essere connesso a una o più reti, garantendo isolamento e gestione del traffico.

Tipi di reti:

  • Reti Bridge (Bridge): per impostazione predefinita, i container sono connessi a una rete bridge, che consente la loro interazione su un unico host.
  • Reti Overlay (Overlay): usate per l'interazione di container avviati su host diversi in un cluster Docker Swarm.
  • Plugin di rete (Network Plugins): permettono di utilizzare driver di rete di terze parti per configurazioni più complesse.

Esempio di creazione e utilizzo di reti personalizzate

In questo esempio vengono create due reti personalizzate front-end e back-end. Il servizio app è connesso a entrambe le reti, il servizio web solo a front-end, e il servizio db solo a back-end.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    networks:
      - front-end

  app:
    image: myapp:latest
    networks:
      - front-end
      - back-end

  db:
    image: postgres:latest
    networks:
      - back-end

networks:
  front-end:
  back-end:

Consigli pratici:

  1. Utilizzo di volumi nominati: i volumi nominati sono gestiti da Docker e garantiscono semplicità nell'uso e nella gestione dei dati. I volumi nominati possono essere collegati a più servizi contemporaneamente. Ad esempio, il servizio di backend registra i log, e il servizio di monitoring li analizza e invia notifiche quando vengono rilevati errori di livello error.
  2. Separazione delle reti: utilizzare più reti consente di isolare varie parti dell'applicazione e controllarne l'interazione.
  3. Archiviazione dei file di configurazione: utilizza volumi montati per i file di configurazione, in modo da poter modificare facilmente la configurazione senza ricostruire le immagini.
  4. Sicurezza delle reti: limita l'accesso alle reti affinché solo i container necessari possano interagire, migliorando così la sicurezza dell'applicazione.

7.3 Esempi di utilizzo di volumi e reti

Esempi di utilizzo di volumi e reti in Docker Compose:

Esempio 1: Applicazione con web server e database

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/usr/share/nginx/html
    networks:
      - webnet

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - webnet

volumes:
  db-data:

networks:
  webnet:

In questo esempio:

  • Il web server nginx e il database PostgreSQL sono connessi alla stessa rete webnet, permettendo loro di interagire. Se c'è una sola rete, non è necessario specificarla — ne verrà creata una di default.
  • I dati del database sono memorizzati nel volume nominato db-data, garantendo la loro persistenza anche quando i container vengono riavviati.

Esempio 2: Applicazione con più livelli

Yaml

version: '3.8'

services:
  frontend:
    image: myfrontend:latest
    networks:
      - front-tier
      - back-tier

  backend:
    image: mybackend:latest
    networks:
      - back-tier
    volumes:
      - backend-data:/var/lib/backend

  database:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - back-tier

volumes:
  backend-data:
  db-data:

networks:
  front-tier:
  back-tier:

In questo esempio:

  • Sono state create due reti: front-tier e back-tier.
  • Il servizio frontend è connesso a entrambe le reti, permettendo di interagire sia con il backend che con i client esterni.
  • I servizi backend e database sono connessi solo alla rete back-tier per garantire il loro isolamento e interazione.
  • I dati dei servizi backend e database sono memorizzati in volumi nominati separati backend-data e db-data.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION