work on docker-machine

This commit is contained in:
nemunaire 2017-10-16 23:21:52 +02:00 committed by nemunaire
parent ff7d0306bc
commit ce02b4574d

View File

@ -1,12 +1,112 @@
\newpage
Swarm
=====
Cluster Swarm
=============
## Lancer plusieurs hôtes
## Création du cluster
`docker-machine`
### De quoi s'agit-il ?
Pour travailler sur un cluster, il faut avoir plusieurs machines. Au moins plus
d'une !
TODO parler du clustering et du provisionning
TODO parler des concurrents
### Provisionner des machines
#### Automagiquement
La solution magique consiste à passer par `docker-machine` pour créer des
machines virtuelles automatiquement provisionnées avec Docker.
Rien de plus simple, mais cela nécessite d'être dans un environnement dans
lequel vous maîtrisez le shell et dans lequel vous pouvez créer des machines
virtuelles. Si votre machine Linux est en fait une machine virtuelle hébergée
par VirtualBox sous Windows, vous allez sans doute préférer la deuxième
solution, que d'utiliser PowerShell et Docker4Windows[^amazon].
[^amazon]: Vous pouvez aussi vous inscrire sur
[Amazon Web Services](https://aws.amazon.com/), `docker-machine` est
capable, à partir de vos
[clefs d'API](https://docs.docker.com/machine/examples/aws/), de créer et
lancer des machines dans le cloud ! Et ce n'est pas le seul service de
[cloud supporté](https://docs.docker.com/machine/drivers/) !
##### Créer une machine
Pour créer une nouvelle machine, nous allons utiliser la commande
`docker-machine create`, en prenant soin de préciser le pilote à utiliser, les
éventuelles options que prend ce pilote, ainsi que le nom que vous souhaitez
donner à cette machine (les machines ne sont pas considérées comme jetables,
leur nom vous permettra par exemple de relancer une machine plus tard) :
```shell
docker-machine create --driver virtualbox echinoidea
```
Consultez la section suivante, réservée aux gens qui ne peuvent pas passer par
`docker-machine` si vous souhaitez avoir plus d'information sur ce que fait
cette commande.
##### Commandes usuelles de `docker-machine`
De la même manière que `docker`, vous pouvez lister les machines connues
(`ls`), changer leur état d'exécution (`start`/`stop`/`kill`/`restart`) ou encore supprimer la machine (`rm`)
Si vous avez besoin d'obtenir un shell : `docker-machine ssh $NAME` et
évidemment la commande `scp` s'utilise de la même manière, pour transférer des
fichiers.
##### Utilisation avec Docker
Rappelez-vous, au cours précédent, nous avions évoqué le fait que le deamon
pouvait ne pas se trouver sur la même machine que le client `docker`. Eh bien
avec `docker-machine` cela prend tout son sens, car vous pouvez très facilement
changer de daamon/machine avec une simple commande :
```shell
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS
$ eval $(docker-machine env echinoidea)
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
a814293b9f45 armbuild/busybox "/bin/sh" 18 seconds ago Up 10 minutes
0caddeed5037 armbuild/alpine "/bin/sh" 3 weeks ago Created
```
On remarque que le client Docker est influencé par l'exécution de notre
commande `docker-machine env`. En effet, cette commande va modifier
l'environnement (d'où le besoin d'`eval` le retour de la commande) pour faire
correspondre `DOCKER_HOST` avec le chemin où le daemon peut être contacté.
Pour reprendre le contrôle de votre environnement local, vous pouvez, soit
supprimer manuellement les variables qui ont été ajoutées par l'évaluation,
soit lancer `eval $(docker machine env -u)`.
#### Automanuellement
Si votre environnement ne vous permet pas d'utiliser `docker-machine`, vous pouvez
https://github.com/boot2docker/boot2docker/releases/latest
## Présentation de l'orchestration
Déployer des conteneurs sur sa propre machine, c'est extrêmement simple grâce à
Docker. Mais souvent, le passage d'une application en production ou simplement
dans un environnement de qualification, n'est pas toujours aisé.
Il n'est pas question pour un administrateur système de faire la répartition de
la charge à la main : afin de ne pas trop charger un serveur qui pourrait
recevoir des pics, alors que d'autres serveurs attendent des calculs.
Ce processus d'optimisation s'appelle l'*orchestration*. Il s'agit de réussir à
répartir au mieux les conteneurs dans notre environnement de production
## Création du cluster Swarm