Files
laboratori-cloud/labs/lab-02-network/tutorial/01-create-vpc-networks.md
Luca Sacchi Ricciardi 5b2c8c37aa feat(lab-02): complete Phase 3 - Network & VPC lab
Implement Lab 02 with Docker bridge networks simulating VPC/Subnets.

Test Infrastructure (RED phase):
- 6 bash test scripts for network creation, isolation, INF-02 compliance
- Fail-fast orchestration with run-all-tests.sh
- Quick validation script for development

Documentation (Diátaxis framework):
- 3 tutorials: VPC creation, container deployment, isolation verification
- 4 how-to guides: create network, inspect config, test isolation, cleanup
- 3 reference docs: Docker network commands, Compose syntax, VPC mapping
- 1 explanation: Docker ↔ VPC parallels (PARA-01/02/03/04)

Infrastructure (GREEN phase):
- docker-compose.yml with VPC networks (10.0.1.0/24, 10.0.2.0/24)
- 5 services: web, app, db, test-public, test-private
- INF-02 compliant: 127.0.0.1 bindings only, no 0.0.0.0
- Private network with --internal flag
- Multi-homed app container (public + private networks)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 17:26:35 +01:00

6.7 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

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).


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