Imaginons que vous souhaitiez utiliser un cluster de machines pour déployer vos conteneurs Docker, en faisant en sorte que ces machines apparaissent comme une seule machine hôte Docker. Vous pouvez bien sûr monter ce genre de configuration chez vous avec des machines physiques ou virtuelles, mais le plus simple, à l’ère du cloud, est de tout simplement laisser des pros s’occuper de toute la tringlerie et pointer sur un hôte multi-machines, avec le réseau déjà paramétré ainsi que tout ce qui est compliqué (gestion des ressources, scaling, etc.)
C’est ce que propose Rackspace avec le produit Carina, qui est actuellement en beta, et gratuit. Pour tester un peu ce dont il retourne, commencez par vous créer un compte sur https://app.getcarina.com/app/login et connectez-vous :
Créez ensuite un cluster en cliquant sur “Add cluster” dans la fenêtre qui s’affiche, et renseignez l’identifiant et si vous souhaitez qu’il passe automatiquement à l’échelle :
De retour au panneau de contrôle, avisez le cluster nouvellement créé et cliquez sur GetAccess :
Le fichier téléchargé contient le nécessaire pour que vous vous connectiez sur votre cluster. Dans un shell Linux, lancez le fichier docker.env pour qu’il configure les variables d’environnement nécessaires :
DIR=$( cd “$( dirname “${BASH_SOURCE[0]}” )” && pwd )
export DOCKER_HOST=tcp://172.99.79.150:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=$DIR
export DOCKER_VERSION=1.8.3
Attention à bien lancer le fichier avec la commande “source docker.env” ou en utilisant “.” à la place, car si vous exécutez simplement, un nouveau shell sera lancé et les variables ne seront pas modifiées dans le shell courant. A propos, ne vous inquiétez pas pour votre installation locale de Docker : seul le shell en cours prendra ces modifications.
On voit d’ailleurs, si on lance une autre fenêtre de shell que les informations sur Docker correspondent à une installation locale :
jpg@Ubuntu1410:~$ docker version
Client version: 1.6.2
Client API version: 1.18
Go version (client): go1.4.2
Git commit (client): 7c8fca2
OS/Arch (client): linux/amd64
Server version: 1.6.2
Server API version: 1.18
Go version (server): go1.4.2
Git commit (server): 7c8fca2
OS/Arch (server): linux/amd64
Alors que dans la fenêtre dans laquelle vous avez activé docker.env, les informations sont légèrement différentes (pour la partie serveur, en tout cas, car la partie cliente utilisée est celle locale) :
jpg@Ubuntu1410:~/carina/TestJPG$ docker version
Client version: 1.6.2
Client API version: 1.18
Go version (client): go1.4.2
Git commit (client): 7c8fca2
OS/Arch (client): linux/amd64
Server version: swarm/0.4.0
Server API version: 1.16
Go version (server): go1.4.2
Git commit (server): d647d82
OS/Arch (server): linux/amd64
Attention, vous devez avoir une version du client Docker assez récente pour que Carina soit pilotable correctement.
A partir de là, toutes les commandes Docker que vous lancerez auront pour effet la création de conteneurs ou le chargement d’images sur le cluster distant. Imaginons par exemple que vous démarriez un serveur Nginx avec une commande comme :
docker run -d -p 80:80 –name web nginx
L’adresse d’exposition ne sera alors plus votre machine locale, mais une machine publique sur internet dont vous pouvez retrouver l’adresse par exemple en lançant docker ps ou docker port :
jpg@Ubuntu1410:~/carina/TestJPG$ docker port web
80/tcp -> 172.99.79.150:80
A partir de là, il ne reste qu’à explorer la doc de Carina pour voir comment passer à l’échelle, gérer les volumes, etc. (d’après ce que j’ai pu en voir pour l’instant, elle est apparemment très bien faite), mais globalement, l’idée fondamentale est là : vous pilotez par l’API locale un hôte Docker distant, et multi-machines.
Attention, il s’agit d’une version beta sans aucune garantie de stabilité. Le site de Carina recommande d’ailleurs de passer le mode de gestion d’échec en “always retry” pour relancer les conteneurs tombés le cas échéant.
J’espère que le programme beta restera suffisamment longtemps gratuit pour que je puisse continuer mes tests et écrire quelques autres retours au-delà de cet article introductif…