La gestione delle porte in Docker e Docker Compose è fondamentale per esporre correttamente i servizi containerizzati all'esterno, sia in ambiente di sviluppo che di produzione. Comprendere come funziona il port mapping aiuta a evitare conflitti, garantisce la sicurezza e migliora la configurazione delle reti.
Esposizione delle porte in Docker
Quando si avvia un container con Docker, è possibile usare l'opzione -p
per esporre una porta interna del container a una porta dell'host. La sintassi è:
docker run -p <porta_host>:<porta_container> nome_immagine
Ad esempio, per esporre la porta 80 del container sulla porta 8080 dell'host:
docker run -p 8080:80 nginx
In questo caso, accedendo a http://localhost:8080
si raggiungerà il server Nginx in esecuzione nel container.
Esposizione delle porte con Docker Compose
Docker Compose consente di definire le configurazioni dei container in un file docker-compose.yml
. Per esporre le porte, si utilizza la chiave ports
.
version: '3.8'
services:
web:
image: nginx
ports:
- "8080:80"
In questo esempio, come nel caso precedente, il container Nginx esporrà la porta 80 sulla porta 8080 dell'host.
Port mapping vs expose
È importante non confondere l'uso di ports
con expose
. Il primo crea un vero e proprio port forwarding verso l'esterno. Il secondo serve solo a documentare che una porta interna viene usata dal container, ma non crea alcuna esposizione verso l'host.
services:
app:
image: myapp
expose:
- "3000"
In questo caso, la porta 3000 sarà accessibile solo da altri container nella stessa rete Docker, ma non dall'esterno.
Consigli pratici
- Evita di esporre porte non necessarie su ambienti di produzione.
- Usa firewall o regole di rete per limitare l'accesso alle porte esposte.
- Controlla i conflitti tra porte host quando usi più container.
Gestire correttamente il port mapping in Docker e Docker Compose ti consente di creare ambienti containerizzati sicuri, ordinati e facilmente scalabili.