forked from quentin/quentin.dufour.io
Ajout docker swarm
This commit is contained in:
parent
5973eed45d
commit
8d3840593f
1 changed files with 153 additions and 0 deletions
153
_posts/2017-02-09-docker-swarm.md
Normal file
153
_posts/2017-02-09-docker-swarm.md
Normal file
|
@ -0,0 +1,153 @@
|
||||||
|
---
|
||||||
|
layout: post
|
||||||
|
slug: decouverte-docker-swarm
|
||||||
|
status: published
|
||||||
|
title: Découverte de Docker Swarm
|
||||||
|
description: Toujours plus de Docker
|
||||||
|
disqus: true
|
||||||
|
categories:
|
||||||
|
- systeme
|
||||||
|
- linux
|
||||||
|
tags:
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
## Tentative Scaleway
|
||||||
|
|
||||||
|
Etant donné le coup très faible des machines Scaleway, j'ai tenté de provisionné plusieurs machines pour réaliser un swarm. Mais ça a été plus compliqué que prévu.
|
||||||
|
|
||||||
|
#### [Impossible d'initiliaser le manager](https://community.online.net/t/docker-swarm-cant-initialize-a-manager-in-1-12-using-native-swarm-commands/2832)
|
||||||
|
|
||||||
|
Pour contourner ce problème, il faut accepter d'utiliser les IP privées, et donc déclarer votre ip en `10.x.x.x`.
|
||||||
|
|
||||||
|
* [Modules noyaux nécessaires pour le mesh Swarm](https://github.com/docker/docker/issues/28168)
|
||||||
|
* [Problèmes avec les bootscripts Scaleway](https://github.com/scaleway/image-ubuntu/issues/78)
|
||||||
|
|
||||||
|
Apparemment les noyaux Scaleway ne supportent pas toujours les modules attendus par Docker Swarm.
|
||||||
|
Mais il semble que le noyeau de l'image Docker devrait fonctionner.
|
||||||
|
D'ailleurs, une rapide vérification avec le script ci-dessous nous en assure.
|
||||||
|
|
||||||
|
Malheureusement, malgrés toutes ces précautions, impossible d'avoir un swarm fonctionnel.
|
||||||
|
Ainsi, une fois le docker registry lancé dans le swarm :
|
||||||
|
|
||||||
|
```
|
||||||
|
$ curl -v 172.18.0.3:5000/v2/_catalog # soit l'IP du conteneur
|
||||||
|
* Trying 172.18.0.3...
|
||||||
|
* Connected to 172.18.0.3 (172.18.0.3) port 5000 (#0)
|
||||||
|
> GET /v2/_catalog HTTP/1.1
|
||||||
|
> Host: 172.18.0.3:5000
|
||||||
|
> User-Agent: curl/7.47.0
|
||||||
|
> Accept: */*
|
||||||
|
>
|
||||||
|
< HTTP/1.1 200 OK
|
||||||
|
< Content-Type: application/json; charset=utf-8
|
||||||
|
< Docker-Distribution-Api-Version: registry/2.0
|
||||||
|
< X-Content-Type-Options: nosniff
|
||||||
|
< Date: Thu, 09 Feb 2017 13:58:15 GMT
|
||||||
|
< Content-Length: 20
|
||||||
|
<
|
||||||
|
{"repositories":[]}
|
||||||
|
|
||||||
|
$ curl -v localhost:5000/v2/_catalog
|
||||||
|
* Trying ::1...
|
||||||
|
* Connected to localhost (::1) port 5000 (#0)
|
||||||
|
> GET /v2/_catalog HTTP/1.1
|
||||||
|
> Host: localhost:5000
|
||||||
|
> User-Agent: curl/7.47.0
|
||||||
|
> Accept: */*
|
||||||
|
>
|
||||||
|
^C
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Ailleurs
|
||||||
|
|
||||||
|
Et pour vérifier que votre noyau supporte bien tout ce qu'il vous faut :
|
||||||
|
|
||||||
|
```
|
||||||
|
bash <(curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh -Lk)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Installer Docker rapidement sous Debian
|
||||||
|
|
||||||
|
Voici un script réalisé à partir des commandes fournies par la documentation de Docker :
|
||||||
|
|
||||||
|
```
|
||||||
|
#!/bin/bash
|
||||||
|
apt update
|
||||||
|
apt install -y curl apt-transport-https ca-certificates software-properties-common
|
||||||
|
curl -fsSL https://yum.dockerproject.org/gpg | apt-key add -
|
||||||
|
add-apt-repository "deb https://apt.dockerproject.org/repo/ debian-$(lsb_release -cs) main"
|
||||||
|
|
||||||
|
apt update
|
||||||
|
apt -y install docker-engine
|
||||||
|
docker -v
|
||||||
|
```
|
||||||
|
|
||||||
|
## Créer le swarm
|
||||||
|
|
||||||
|
* [Tutoriel Docker Swarm](https://docs.docker.com/engine/swarm/swarm-tutorial/)
|
||||||
|
|
||||||
|
Maintenant sur master :
|
||||||
|
|
||||||
|
```
|
||||||
|
docker swarm init --advertise-addr 1.2.3.4
|
||||||
|
```
|
||||||
|
|
||||||
|
Ce qui devrait donner quelque chose comme :
|
||||||
|
|
||||||
|
```
|
||||||
|
Swarm initialized: current node (....) is now a manager.
|
||||||
|
|
||||||
|
To add a worker to this swarm, run the following command:
|
||||||
|
|
||||||
|
docker swarm join --token ... 1.2.3.4:2377
|
||||||
|
|
||||||
|
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
|
||||||
|
```
|
||||||
|
|
||||||
|
On va donc lancer la commande sur les 2 slaves.
|
||||||
|
*Si vous avez perdu la commande, tapez juste `docker swarm join-token worker` sur le master*.
|
||||||
|
|
||||||
|
On vérifie que tout s'est bien passé :
|
||||||
|
|
||||||
|
```
|
||||||
|
# docker node ls
|
||||||
|
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
|
||||||
|
3ha23m6hqd31tly5mg28ngpcd swarm-slave-02 Ready Active
|
||||||
|
unf2nknn2w6zmhyhuqbpk6py9 * scw-7509af Ready Active Leader
|
||||||
|
zp3qgmbfxteflon7vwv4qt7vp scw-c9986a Ready Active
|
||||||
|
```
|
||||||
|
|
||||||
|
## Lancer un docker registry pour stocker nos images
|
||||||
|
|
||||||
|
* [Déployer un docker registry](https://docs.docker.com/registry/deploying/)
|
||||||
|
* [Tutoriel Docker Registry sur Swarm](https://lostechies.com/gabrielschenker/2016/09/05/docker-and-swarm-mode-part-1/)
|
||||||
|
|
||||||
|
```
|
||||||
|
docker service create --replicas 1 --publish 5000:5000 --name registry registry:2
|
||||||
|
```
|
||||||
|
|
||||||
|
Quelques commandes pour voir si tout s'est bien passé :
|
||||||
|
|
||||||
|
```
|
||||||
|
docker service ls
|
||||||
|
docker service inspect --pretty registry
|
||||||
|
docker service ps registry
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour tester que tout marche bien :
|
||||||
|
|
||||||
|
```
|
||||||
|
curl localhost:5000/v2/_catalog
|
||||||
|
```
|
||||||
|
|
||||||
|
Et si besoin de le supprimer :
|
||||||
|
|
||||||
|
```
|
||||||
|
docker service rm registry
|
||||||
|
```
|
||||||
|
|
||||||
|
## Build nos images et les publier sur le registry
|
||||||
|
|
||||||
|
*en cours de rédaction*
|
Loading…
Reference in a new issue