• Docker
  • Probleme sur la partie : VI-D-3. Troisième cas : le déploiement

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

Tu veux lier ton reverse proxy avec quel container? parce que le container toto n’existe pas.

proxy_pass http://toto:8000;

soit proxy_pass http://node-green:8000;
soit proxy_pass http://node-blue:8000;

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

Répondre…