Orchestration des containers Docker avec fig

Ficus_carica0

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 adminrezo/lamp

 

En fig ça donne :

  • On crée un fichier YAML fig.yml
  • Dans ce fichier on écrit :

    lamp: image:adminrezo/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 adminrezo/lamp

 

En fig ça donne :

lamp:
    image: adminrezo/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 adminrezo/lamp
docker run --name lamp2 -v /var/www/client1:/var/www -p 8882:80 -d adminrezo/lamp
docker run --name lamp3 -v /var/www/client1:/var/www -p 8883:80 -d adminrezo/lamp
docker run --name python1 -d adminrezo/python
docker run --name python2 -d adminrezo/python

 

En fig ça donne :

lamp:
    image: adminrezo/lamp
    ports: # Il faut des ports différents, fig va générer des numéros de ports aléatoires
        - 80
        - 443
python:
    image: adminrezo/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

 

Sur le même sujet :