diff --git a/tutorial/docker-orchestration/swarm.md b/tutorial/docker-orchestration/swarm.md index df2b052..a5d98ae 100644 --- a/tutorial/docker-orchestration/swarm.md +++ b/tutorial/docker-orchestration/swarm.md @@ -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