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.