Attention ceci est mon brouillon avant de faire une belle documentation sur Docker (il y a à boire et à manger).
Avant de me lancer dans “HAProxy”, je vais faire un test avec “Docker Swarm”.
Pour l’instant “Docker Swarn” n’est pas un répartiteur de charge comme “HAproxy”. En fait il répartit la charge au moment du déploiement. Et aussi il permet le déploiement sur plusieurs servers à la fois, ce qui est un gain de temps énorme pour les administrateurs.
Je vais donc me lancer dans “Docker Swarm”, la première étape est la suivante :
[root@localhost ~]# docker pull swarm
Using default tag: latest
latest: Pulling from library/swarm
8c01723048ed: Pull complete
28ef38ffcca5: Pull complete
f1f933319091: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:8b007c8fc861cfaa2f0b9160e6ed3a39109af6e28dfe03982a05158e218bcc52
Status: Downloaded newer image for swarm:latest
On crée le swarm :
[root@localhost ~]# docker run --rm swarm create
553e1256993f92792ddd075713b16e34
Ensuite on lance des agents (bien noter le token en vert pour la suite):
[root@localhost ~]# docker run -d swarm join --advertise 10.0.0.101:2375 token://553e1256993f92792ddd075713b16e34
b61b2c9ea993e85279f720ebaa7bb60f1e187f2f09aa073772f7ae1ac99df636
[root@localhost ~]# docker run -d swarm join --advertise 10.0.0.102:2375 token://553e1256993f92792ddd075713b16e34
7acaca267109e1505890757a03d01b2833dd6dc2a750520bab46bf463d4c344b
[root@localhost ~]# docker run -d swarm join --advertise 10.0.0.103:2375 token://553e1256993f92792ddd075713b16e34
6c8fae76bce2c75be454944b3fd04a591f3811f6109e400dd62b0f9cab3a8c11
[root@localhost ~]# docker run -d swarm join --advertise 10.0.0.104:2375 token://553e1256993f92792ddd075713b16e34
75003c0fea9dfe0df1f613d360968758d96257aa27c19b39a671d4028235685f
J’ai donc 4 agents qui sont sur 4 ip différentes et qui écoutent sur le port 2375. Maintenant je lance le manageur
[root@localhost ~]# docker run -d -p 80:2375 swarm manage token://553e1256993f92792ddd075713b16e34
cd4d60fd7638f775a4e04afad034877adf38a2b627abc31e4d4182ddd6e43470
docker: Error response from daemon: driver failed programming external connectivity on endpoint compassionate_mahavira (b4edffad195ad03292147ffe3cc6d753c6814c9b6bcd16835e01f249e64364e6): Bind for 0.0.0.0:80 failed: port is already allocated.
Aie cela plante car j’ai oublié de tuer le précédent qui écoute aussi sur le port 80.
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
75003c0fea9d swarm "/swarm join --advert" 4 minutes ago Up 4 minutes 2375/tcp nauseous_carson
6c8fae76bce2 swarm "/swarm join --advert" 4 minutes ago Up 4 minutes 2375/tcp adoring_visvesvaraya
7acaca267109 swarm "/swarm join --advert" 4 minutes ago Up 4 minutes 2375/tcp evil_northcutt
b61b2c9ea993 swarm "/swarm join --advert" 4 minutes ago Up 4 minutes 2375/tcp dreamy_lovelace
9cf698cacc2e my-server "/sbin/server" About an hour ago Up About an hour 0.0.0.0:80->80/tcp my-server3
2fc533c55725 postgres "/docker-entrypoint.s" 4 hours ago Up 4 hours 0.0.0.0:5432->5432/tcp postgres2
[root@localhost ~]# docker stop 9cf698cacc2e
9cf698cacc2e
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
75003c0fea9d swarm "/swarm join --advert" 5 minutes ago Up 5 minutes 2375/tcp nauseous_carson
6c8fae76bce2 swarm "/swarm join --advert" 5 minutes ago Up 5 minutes 2375/tcp adoring_visvesvaraya
7acaca267109 swarm "/swarm join --advert" 5 minutes ago Up 5 minutes 2375/tcp evil_northcutt
b61b2c9ea993 swarm "/swarm join --advert" 5 minutes ago Up 5 minutes 2375/tcp dreamy_lovelace
2fc533c55725 postgres "/docker-entrypoint.s" 4 hours ago Up 4 hours 0.0.0.0:5432->5432/tcp postgres2
[root@localhost ~]# docker run -d -p 80:2375 swarm manage token://553e1256993f92792ddd075713b16e34
37a3a8a409b6683c7495cbbda3f18f7e1bd2da3c364252303ba52860eaba9a64
[root@localhost ~]# docker run --rm swarm list token://553e1256993f92792ddd075713b16e34
10.0.0.104:2375
10.0.0.102:2375
10.0.0.103:2375
10.0.0.101:2375
[root@localhost ~]# telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
HTTP/1.1 400 Bad Request
Maintenant je peux donc repasser à HAproxy qui est un vrai loadbalanceur. Pour le loadbalanceur il y a aussi Nginx.
Les notions à connaitre sous Docker semblent être (dans un premier temps):
- Consul pour la découverte des services de façon dynamique.
- Nginx ou HAProxy pour la répartition de charge.
- Registrator pour s’enregistrer en temps que service.
- La création d’un Dockerfile
- Le lancement, l’arrêt, le status de ./Container sous Docker.
Je vais essayer de faire une documentation détaillée quand je maitriserais un peu mieux.