Orchestration des containers Docker avec fig
J’ai déjà pas mal parlé de Docker dans ce blog et si vous avez déjà travaillé avec, vous savez sûrement qu’il manque à Docker un outil d’orchestration pour manipuler les containers massivement et automatiquement.
Fig, un projet annexe à Docker répondait à ce problème.
Fig a été racheté par Docker.com pour l’intégrer directement dans le projet Docker.
C’est quoi ?
C’est un orchestrateur pour Docker, en gros, un fichier Yaml qui dit :
- quels sont les containers
- quoi en faire (construire, démarrer, arrêter, …)
- avec quelles options (volumes, ports, …)
Comme c’est du Yaml, c’est simple et lisible.
Installation :
Vous êtes familiers avec Python, donc c’est très simple :
apt-get install python-pip
pip install fig
Un exemple avec LAMP :
Je veux démarrer mon container Lamp ; en commandes Docker, ça donne :
docker run -d dans-les-nuages/lamp
En fig ça donne :
-
On crée un fichier YAML fig.yml
-
Dans ce fichier on écrit :
lamp: image:dans-les-nuages/lamp
Et on lance :
# Le -d pour lancer en démon.
fig up -d
# Pour vérifier :
fig ps
Lamp avec plusieurs options :
Je veux démarrer un lamp nommé lamp sur le port 8888 de l’hôte avec un montage du répertoire /var/www sur /var/www/client1 sur l’hôte.
docker run -v /var/www/client1:/var/www -p 8888:80 -d dans-les-nuages/lamp
En fig ça donne :
lamp:
image: dans-les-nuages/lamp<code class="text language-text" data-lang="text">
volumes:
- /var/www/client1:/var/www
ports:
- 8888:80</code>
Je relance fig up et fig ps pour recréer mes containers.
Lancer plein de containers :
Je veux démarrer le logiciel iPython3 dans 2 containers. et démarrer 3 lamp avec des options similaires au chapitre précédent :
En commandes Docker, ça donne :
docker run --name lamp1 -v /var/www/client1:/var/www -p 8881:80 -d dans-les-nuages/lamp
docker run --name lamp2 -v /var/www/client1:/var/www -p 8882:80 -d dans-les-nuages/lamp
docker run --name lamp3 -v /var/www/client1:/var/www -p 8883:80 -d dans-les-nuages/lamp
docker run --name python1 -d dans-les-nuages/python
docker run --name python2 -d dans-les-nuages/python
En fig ça donne :
lamp:
image: dans-les-nuages/lamp
ports: # Il faut des ports différents, fig va générer des numéros de ports aléatoires
- 80
- 443
python:
image: dans-les-nuages/python
Et on démarre à la volée X containers :
fig scale lamp=3 python=2
Manipuler les containers :
fig –help vous mettra sur la voie de ce qu’on peut faire, mais très simplement :
# Démarrer/Stopper/Supprimer tous les containers
fig start lamp
fig stop lamp
fig rm lamp
# Envoi de commandes Ad-hoc :
# Connaître la version de Bash et le mettre à jour (on m'a déjà fait le coup ;-) )
fig run fig_lamp_1 bash --version
fig run fig_lamp_1 apt-get update
fig run fig_lamp_1 apt-get install bash