Files
laboratori-cloud/labs/lab-02-network/tutorial/01-create-vpc-networks.md
T
2026-04-10 13:43:02 +00:00

7.3 KiB

Tutorial: Creare Reti VPC con Docker Bridge Networks

In questo tutorial imparerai a creare reti Docker bridge che simulano le VPC (Virtual Private Cloud) e le subnet dei provider cloud. Capirai come segmentare il traffico di rete tra container usando concetti direttamente trasferibili ad AWS, Azure o GCP.

Obiettivo

Creare due reti isolate che simulano una subnet pubblica e una subnet privata in una VPC cloud:

  • VPC Public Subnet: lab02-vpc-public (10.0.1.0/24) - per servizi accessibili
  • VPC Private Subnet: lab02-vpc-private (10.0.2.0/24) - isolata, senza accesso esterno

Nota pratica: il tutorial 2 usa docker compose per creare e gestire le stesse reti. Se segui questo tutorial alla lettera con docker network create, prima di avviare il compose dovrai rimuovere le reti manuali oppure dichiararle come reti esterne. Nel flusso consigliato per studenti conviene usare questo tutorial per capire i concetti e usare il compose del tutorial 2 come implementazione finale.

Prerequisiti

  • Docker Engine >= 24.0 installato e in esecuzione
  • Comandi base Docker (docker run, docker ps)
  • Completato Lab 01: IAM & Sicurezza (raccomandato)

Passo 1: Comprendere i Concetti VPC

Prima di creare reti, capiremo cosa stiamo simulando.

Concetti Cloud:

  • VPC (Virtual Private Cloud): Rete virtuale isolata nel cloud
  • Subnet: Segmento di indirizzi IP all'interno di una VPC (es. 10.0.1.0/24)
  • Subnet Pubblica: Subnet con route verso internet gateway
  • Subnet Privata: Subnet senza accesso diretto a internet

Parallelismo Docker ↔ Cloud:

Concetto Docker Cloud AWS
Bridge Network VPC
Subnet (10.0.x.0/24) Subnet CIDR
--internal flag Private subnet (no IGW)
Container EC2 Instance

Passo 2: Creare la Subnet Pubblica

Creiamo la prima rete che simula una subnet pubblica VPC.

Esegui:

# Crea rete public subnet con subnet custom
docker network create --driver bridge \
  --subnet 10.0.1.0/24 \
  --gateway 10.0.1.1 \
  lab02-vpc-public

Spiegazione:

  • --driver bridge: Usa bridge driver (isolamento host locale)
  • --subnet 10.0.1.0/24: CIDR block per questa subnet
  • --gateway 10.0.1.1: Gateway predefinito per la subnet
  • lab02-vpc-public: Nome che segue nomenclatura cloud

Atteso:

a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2

Passo 3: Verificare la Creazione della Rete Pubblica

Verifichiamo che la rete sia stata creata correttamente.

Esegui:

# Lista tutte le reti
docker network ls | grep lab02

Atteso:

lab02-vpc-public    bridge    local

Esegui:

# Ispeziona la configurazione rete
docker network inspect lab02-vpc-public

Atteso (output formattato):

{
  "Name": "lab02-vpc-public",
  "Driver": "bridge",
  "IPAM": {
    "Config": [
      {
        "Subnet": "10.0.1.0/24",
        "Gateway": "10.0.1.1"
      }
    ]
  },
  "Internal": false
}

Verifica che:

  • Subnet sia 10.0.1.0/24
  • Gateway sia 10.0.1.1
  • Internal sia false (pubblica)

Passo 4: Creare la Subnet Privata

Ora creiamo una rete isolata che simula una subnet privata.

Esegui:

# Crea rete private subnet (isolata)
docker network create --driver bridge \
  --subnet 10.0.2.0/24 \
  --gateway 10.0.2.1 \
  --internal \
  lab02-vpc-private

Spiegazione:

  • --internal: Flag critico! Isola la rete (nessun accesso esterno)
  • Subnet diversa: 10.0.2.0/24 (nessuna sovrapposizione con pubblica)
  • Stesso gateway pattern: 10.0.2.1

Atteso:

f1e2d3c4b5a697886950a2b3c4d5e6f7g8h9i0j1k2l3

Passo 5: Verificare la Subnet Privata

Verifichiamo che la rete privata sia configurata correttamente.

Esegui:

# Ispeziona la rete privata
docker network inspect lab02-vpc-private

Atteso:

{
  "Name": "lab02-vpc-private",
  "Driver": "bridge",
  "IPAM": {
    "Config": [
      {
        "Subnet": "10.0.2.0/24",
        "Gateway": "10.0.2.1"
      }
    ]
  },
  "Internal": true
}

Verifica che:

  • Subnet sia 10.0.2.0/24
  • Gateway sia 10.0.2.1
  • Internal sia true (critico per isolamento!)

Passo 6: Verificare Entrambe le Reti

Vediamo un riepilogo di entrambe le reti create.

Esegui:

# Lista reti lab02
docker network ls --filter "name=lab02" --format "table {{.Name}}\t{{.Driver}}\t{{.Scope}}"

Atteso:

NAME                DRIVER    SCOPE
lab02-vpc-private   bridge    local
lab02-vpc-public    bridge    local

Esegui:

# Verifica subnet CIDR
docker network inspect lab02-vpc-public --format '{{.IPAM.Config}}'
docker network inspect lab02-vpc-private --format '{{.IPAM.Config}}'

Passo 7: Testare con un Container (Opzionale)

Verifichiamo che le reti funzionino creando un container di test.

Esegui:

# Crea container nella rete pubblica
docker run -d --name test-web \
  --network lab02-vpc-public \
  nginx:alpine

Esegui:

# Verifica che il container abbia IP dalla subnet corretta
docker inspect test-web --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'

Atteso:

10.0.1.2

(Indirizzo nella subnet 10.0.1.0/24 - corretto!)

Pulisci il test:

docker stop test-web
docker rm test-web

Parallelismo con AWS VPC

Operazione Locale AWS VPC Equivalente
docker network create aws ec2 create-vpc
--subnet 10.0.1.0/24 aws ec2 create-subnet --cidr-block
--internal No route to Internet Gateway
lab02-vpc-public vpc-12345678
Container nella rete EC2 instance in subnet

Verifica

Hai completato questo tutorial quando:

  • Rete lab02-vpc-public creata con subnet 10.0.1.0/24
  • Rete lab02-vpc-private creata con subnet 10.0.2.0/24
  • Rete privata ha Internal: true
  • Entrambe le reti appaiono in docker network ls
  • Capisci il parallelismo tra Docker bridge networks e VPC

Prossimo Passo

Nel prossimo tutorial imparerai a distribuire container in queste reti usando docker-compose.yml, creando un'architettura multi-tier (web pubblica, database privato).

Prima di passare al tutorial 2, se hai creato le reti manualmente in questo tutorial, puliscile per evitare conflitti con Compose:

docker network rm lab02-vpc-public lab02-vpc-private

Troubleshooting

Problema: Error: network already exists

Soluzione:

# Rimuovi rete esistente
docker network rm lab02-vpc-public lab02-vpc-private

# Oppure usa nomi diversi
docker network create ... lab02-vpc-public-v2

Problema: Error: subnet conflicts with existing network

Soluzione:

# Verifica subnet in uso
docker network ls -q | xargs docker network inspect --format '{{.IPAM.Config}}'

# Cambia subnet in conflitto
docker network create --subnet 10.0.10.0/24 ...

Problema: Container non ottiene IP dalla subnet corretta

Soluzione:

# Verifica configurazione IPAM
docker network inspect lab02-vpc-public --format '{{json .IPAM}}'

# Assicurati che il container sia nella rete corretta
docker inspect container --format '{{json .NetworkSettings.Networks}}'

Problema: --internal flag blocks all communication

Questo è il comportamento corretto! I container in reti private:

  • NON possono raggiungere internet
  • NON possono essere raggiunti dall'host
  • POSONO comunicare con altri container nella stessa rete