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.
J’ai essayé l’install de nginx :
[root@localhost ~]# docker run –name some-nginx -d some-content-nginx
Unable to find image ‘some-content-nginx:latest’ locally
Pulling repository docker.io/library/some-content-nginx
docker: Error: image library/some-content-nginx not found.
Normal il faut connaitre ta commande build et le Dockerfile que tu as utilisé avant de faire cela. Normalement tu as du faire un build pour la création de some-nginx. L’étape build se fait avant l’étape run.