---
title: "Docker : le cinquième pas."
url: https://www.cyber-neurones.org/2016/04/docker-le-cinquieme-pas/
date: 2016-04-19
modified: 2017-09-06
lang: fr
author: "Frederic"
description: "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..."
categories:
  - "Docker"
tags:
  - "Docker"
  - "swarm"
word_count: 562
---

# Docker : le cinquième pas.

**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](https://en.wikipedia.org/wiki/HAProxy)", je vais faire un test avec "[Docker Swarm](https://docs.docker.com/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.