Gestione delle porte in Docker e Docker Compose

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.

Torna su