diff --git a/docker/009-networking.md b/docker/009-networking.md index f27aac9..be06540 100644 --- a/docker/009-networking.md +++ b/docker/009-networking.md @@ -116,3 +116,48 @@ 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 ``` + +## Reti virtuali + +Per impostazione predefinita, i container Docker sono isolati l'uno dall'altro, il che impedisce la comunicazione diretta tra servizi che operano su stack diversi. Tuttavia, è possibile creare una rete virtuale condivisa tra container di due stack differenti, consentendo loro di comunicare. + +La sintassi, per definire un nuovo network è la seguente: + +```yml +services: + 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' + networks: + - default # Le reti sotto network non vengono aggiunte alla configurazione di default, ma sostituite. Pertanto, la rete default deve essere specificata esplicitamente + - nginx # Il container nginx farà parte dei seguenti network +networks: + nginx: + name: mynetwork +``` + +Nel secondo stack, è necessario definire la stessa rete per consentire la comunicazione tra i container: + +```yml +services: + debug: + image: ubuntu + entrypoint: "bash -c 'while true; do sleep 1; done'" + networks: + - default + - nginx + +networks: + nginx: + name: mynetwork + external: true # La rete è definita esternamente. Se non specificato, verrebbe generato un errore, poiché la rete esiste già e non può essere creata una rete con nome identico + +``` + +In questo modo, è possibile mettere in comunicazione due container di due stack diversi, semplicemente creando una rete virtuale condivisa.