Dans cet exemple nous créons un réseau bridge sur lequel nous connectons 3 conteneurs :

  • wit-blue
  • wit-pink
  • nginx

Seul le conteneur nginx sera exposé sur le port 80 et nginx va appliquer les règles suivantes :

  • le trafic arrivant sur le path /blue sera routé vers le service wit-blue
  • le trafic arrivant sur le path /pink sera routé vers le service wit-pink

Nous utiliserons ce fichier de configuration Nginx :

nginx.conf ouvrir

events {

}


http {
    server {
        listen 80;
        listen [::]:80;
        access_log /var/log/nginx/reverse-access.log;
        error_log /var/log/nginx/reverse-error.log;

        location /blue {
                        proxy_pass http://wit-blue:8080;
        }
        location /pink {
                        proxy_pass http://wit-pink:8080;
        }
    }
}

Voici le script permettant de dérouler l’exemple :

demo-up ouvrir

echo "Deploying network and containers..."
docker network create --driver bridge wit-net

docker run -d \
    --name wit-blue \
    --env COLOR=lightblue \
    --network wit-net \
    xian310/who-is-there:21

docker run -d \
    --name wit-pink \
    --env COLOR=pink \
    --network wit-net \
    xian310/who-is-there:21

docker run -d \
    --name nginx \
    --network wit-net \
    --publish 8000:80 \
    -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro \
    nginx:1.21.3

sleep 2
docker ps

echo
echo "Waiting 10 seconds..."
sleep 10

echo
echo "Access to the APIs"
nginx_internal_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nginx)

for url in "$nginx_internal_ip:80/blue" "$nginx_internal_ip:80/pink" "127.0.0.1:8000/blue" "127.0.0.1:8000/pink"
do
    echo
    echo "curl $url"
    curl "$url"
done

Pour lancer la démo jouer la commande suivante :

bash demo-up

Et le script de nettoyage : demo-down ouvrir

echo "Destroying the stack..."
sleep 10

docker rm -f wit-blue wit-pink nginx
docker network rm wit-net
docker ps

Pour lancer le nettoyage :

bash demo-down