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>
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 subnetlab02-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-publiccreata con subnet 10.0.1.0/24 - Rete
lab02-vpc-privatecreata 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