port mapping
This commit is contained in:
@@ -34,3 +34,85 @@ Esistono diverse tipologie di networking che possono essere utilizzate in Docker
|
||||
- `host`: in questa modalità, il container condivide l'interfaccia di rete con il sistema host. Non vi è alcun isolamento, pertanto qualsiasi processo eseguito all'interno del container ha accesso diretto alla rete dell'host. Questo tipo di accesso alla rete è analogo a quello di un browser web su un sistema operativo
|
||||
- `bridge`: questo driver fornisce isolamento tra l'host e i container, consentendo la creazione di reti virtuali. Tali reti operano in uno spazio di indirizzamento separato rispetto al sistema host e alla rete fisica, permettendo ai container di comunicare tra loro in modo privato o semi-privato. Questa modalità è la più comune e preferita per la maggior parte delle applicazioni Docker
|
||||
- `null`: in questa configurazione, il container è completamente isolato dalla rete, non avendo alcuna connettività di rete disponibile
|
||||
|
||||
## Port mapping
|
||||
|
||||
Il seguente stack di esempio è composto da due servizi: `php` e `nginx`. In particolare, il servizio nginx espone due porte: la porta 80 del container sulla porta 8080 del sistema host e la porta 443 del container sulla porta 8443 dell'host.
|
||||
|
||||
```yml
|
||||
services:
|
||||
php:
|
||||
image: 'php:8.1-fpm'
|
||||
container_name: ${APP_NAME:?err}-php
|
||||
volumes:
|
||||
- './app:/var/www/html'
|
||||
|
||||
nginx:
|
||||
image: 'nginx:latest'
|
||||
container_name: ${APP_NAME:?err}-nginx
|
||||
ports:
|
||||
- '8081:80'
|
||||
- '8443:443'
|
||||
volumes:
|
||||
- './app:/var/www/html'
|
||||
- './config/nginx:/etc/nginx/conf.d'
|
||||
```
|
||||
|
||||
Se si avvia lo stack con il comando `docker compose up -`d, il comando `docker ps` conferma che nginx è in esecuzione e in ascolto su tutte le interfacce di rete (`0.0.0.0`) alla porta 8080.
|
||||
|
||||
```bash
|
||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
73a0991fb71b nginx:latest "/docker-entrypoint.…" 3 seconds ago Up 3 seconds 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp eager_northcutt
|
||||
```
|
||||
|
||||
Accedendo a `localhost:8080`, è possibile raggiungere il sito web servito dallo stack. Tuttavia, questo consente anche a chiunque si trovi sulla stessa rete o, se presente il NAT sul router, a chiunque conosca l'indirizzo IP del sistema host di accedere al servizio.
|
||||
|
||||
Per limitare l'accesso al servizio nginx in modo che sia raggiungibile solo dal sistema host, è necessario modificare la configurazione dello stack affinché ascolti solo su localhost e non su tutte le interfacce di rete:
|
||||
|
||||
```yml
|
||||
nginx:
|
||||
image: 'nginx:latest'
|
||||
container_name: ${APP_NAME:?err}-nginx
|
||||
ports:
|
||||
- '127.0.0.1:8081:80'
|
||||
- '127.0.0.1:8443:443'
|
||||
```
|
||||
|
||||
Se non è importante che le porte associate sul sistema host siano sempre le stesse, è possibile **allocarle dinamicamente**, in modo da sceglierne sempre una disponibile, evitando conflitti:
|
||||
|
||||
```yml
|
||||
nginx:
|
||||
image: 'nginx:latest'
|
||||
container_name: ${APP_NAME:?err}-nginx
|
||||
ports:
|
||||
- '80'
|
||||
- '443'
|
||||
```
|
||||
|
||||
Le porte sono ora allocate in modo casuale:
|
||||
|
||||
```bash
|
||||
docker ps
|
||||
|
||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
654f739ce935 nginx:latest "/docker-entrypoint.…" 5 seconds ago Up 4 seconds 0.0.0.0:32770->80/tcp, [::]:32770->80/tcp crazy_jackson
|
||||
```
|
||||
|
||||
Se si desidera che Docker assegni automaticamente una porta disponibile in `localhost`, è possibile utilizzare la seguente sintassi:
|
||||
|
||||
```yml
|
||||
services:
|
||||
nginx:
|
||||
image: 'nginx:latest'
|
||||
container_name: ${APP_NAME:?err}-nginx
|
||||
ports:
|
||||
- '127.0.0.1:0:80' # Assegna una porta casuale su localhost
|
||||
```
|
||||
|
||||
In questo caso, `127.0.0.1:0` indica a Docker di scegliere automaticamente una porta disponibile sul sistema host, associandola alla porta 80 del container.
|
||||
|
||||
```bash
|
||||
docker ps
|
||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
6559daa92656 nginx:latest "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 127.0.0.1:32769->80/tcp nginx
|
||||
```
|
||||
|
Reference in New Issue
Block a user