F
francforr

  • 18 juil. 2019
  • Inscrit 17 juin 2019
  • Comme je le disais je suis la doc de : https://xataz.developpez.com/tutoriels/utilisation-docker/#LVI-D-3
    VI-D-3. Troisième cas : le déploiement▲
    Dans ce troisième cas, nous allons partir sur quelque chose d'un peu plus complexe, et spécifique. Nous allons ici voir comment faire un déploiement en blue/green (version simplifiée), c'est-à-dire sans interruption de service (ou très peu, moins d'une seconde).

    Dans ce scénario, nous aurons trois conteneurs, un conteneur nginx qui servira de reverse proxy, et deux conteneurs nodejs avec des versions différentes.

    Nous allons donc reprendre notre code de tout à l'heure et lancer avec node5 et node6 :

    Sélectionnez
    1.
    2.
    3.
    4.
    $ docker container run -d -v $(pwd):/usr/src/app -w /usr/src/app -p 8001:8000 --name node-blue xataz/node:6 node app.js
    e2a392d5b0ee7c65683dc277eb47c67dd93804ef36458968b2e5d34afc154957
    $ docker container run -d -v $(pwd):/usr/src/app -w /usr/src/app -p 8002:8000 --name node-green xataz/node:7 node app.js
    18ff8c5b4c4d9c37cd2ee14eadd75e4addc10e04324cd513c77ae55b4912b042
    node-blue est actuellement notre production, et node-green notre machine de test. Nous appellerons ceci des branches. Notre but est donc de mettre à jour notre node de la version 6 à la version 7, en s'assurant que tout fonctionne correctement.

    Pour cela nous utiliserons nginx en reverse proxy. Nous commençons par créer notre fichier de configuration nginx :

    Sélectionnez
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.

    mkdir -p /docker/config/nginx

    vim /docker/config/nginx/bluegreen.conf

    server {
    listen 8080;

    location / {
    proxy_pass http://toto:8000;
    }
    }
    On part sur un fichier de configuration plutôt simple. Pour vous expliquer rapidement, tout ce qui arrivera sur le port 8080 sera retransmis au conteneur node-blue qui répondra à nginx qui nous le retransmettra. Nous utilisons ici directement le port de l'application, puisque nous « attaquons » directement le conteneur. Nous verrons juste en dessous à quoi correspond le toto.

    Puis on lance notre nginx :

    Sélectionnez
    $ docker container run -d -v /docker/config/nginx:/sites-enabled -p 80:8080 --name reverse --link node-blue:toto --link node-green:tata xataz/nginx:mainline
    Nous voyons ici un nouveau paramètre, le --link, celui-ci permet de créer un alias, au sein du conteneur lancé, afin de communiquer avec un autre conteneur, via cet alias. toto est le nom de l'alias qui pointe vers le conteneur node-blue, c'est donc identique avec tata et node-green. J'ai volontairement appelé les alias comme ceci, pour différencier le nom du conteneur et l'alias.

    Si nous testons notre appli, avec l'URL http://XX.XX.XX.XX, nous devrions avoir affiché :

    Sélectionnez
    Hello Mondedie avec la version v6.10.3

  • source : https://xataz.developpez.com/tutoriels/utilisation-docker/#LVI-D-3

    Bonjour , et d'abord merci pour le cours : Utilisation de Docker.

    J'ai un problème sur la partie : VI-D-3. Troisième cas : le déploiement
    Cela ne fonctionne pas:

    Voici ma conf:

    root@debian_docker_1:~# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    6cd7a64c7ba2 xataz/nginx:mainline "/usr/local/bin/star…" About a minute ago Up 36 seconds 8443/tcp, 0.0.0.0:80->8080/tcp reverse
    01a1687db5d1 xataz/node:7 "/usr/local/bin/star…" About an hour ago Up About an hour 0.0.0.0:8002->8000/tcp node-green
    c7cdecc6309f xataz/node:6 "/usr/local/bin/star…" About an hour ago Up About an hour 0.0.0.0:8001->8000/tcp node-blue
    root@debian_docker_1:~# docker container logs 6cd7a64c7ba2
    s6-svscan: warning: unable to exec finish script .s6-svscan/finish: Permission denied
    s6-svscan: warning: executing into .s6-svscan/crash
    s6-svscan: fatal: unable to exec .s6-svscan/crash: No such file or directory
    addgroup: group 'web' in use
    root@debian_docker_1:~# ls app.js
    app.js
    root@debian_docker_1:~# cat app.js
    var http = require('http');
    
    var server = http.createServer(function (request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.end("Hello Mondedie avec la version " + process.version + "\n");
    });
    
    server.listen(8000);
    console.log("Server running at 0.0.0.0:8000");
    root@debian_docker_1:~# cat /docker/config/nginx/bluegreen.conf
    server {
    
    listen 8080;
    
    location / {
    proxy_pass http://toto:8000;
    }
    
    }

    Quand j'essaye d'accéder au site : http://ip
    Cela ne fonctionne pas non plus avec http://ip:8080

    j'ai Nginx 1.113.8 on 6cd....

    Nginx runnig inside a 16MB Alpine docker Container.
    Je n'ai pas "Hello Mondedie avec la version v6.11.4", cependant http://192.168.1.80:8001 et 8002 fonctionne.

    Pouvez vous m'aider s'il vous plait.

    Cordialement