docker

Docker-compose pour orchestrer les containeurs

Docker a livré ce jeudi un nouvel outil: docker-compose. Il s’agit en fait de l’outil Fig développé par Orchad la société acquise par Docker en juillet dernier.

Cet outil propose un mécanisme d’orchestration des containers Docker. Voyons ce qu’il apporte pour le déploiement de nos applications.

Un container n’est pas une machine virtuelle

Il est important de rappeler ce fait qui est parfois oublié.

Pour des raisons stratégiques, les premières présentation du fonctionnement de Docker le comparait aux machines virtuelles.

docker-containers-vms

Cette comparaison nous a influencé en nous poussant à reproduire le modèle de déploiement par machine virtuelle. La machine virtuelle comprend une application homogène constituée par exemple des composants web et de la base de données.

Docker permet effectivement de faire ce type de déploiement. En utilisant par exemple supervisor comme processus principal chargé de démarrer le processus web d’une part et la base de données d’autre part. Des applications importantes sont toujours livrées comme ceci (cf Dockerfile discourse).

Ce n’est pas souhaitable. Ces images, spécialisées et comprenant trop de dépendances, sont difficilement réutilisables.

Best-practice 1 : un container = un processus

Aujourd’hui, les modèles d’utilisation et les «bests-practices» apparaissent. Après un peu d’expérimentation, les meilleures façons de déployer avec Docker se dessinent.

Il est plus simple et maintenable de fournir une application via des containers distincts (web, et base) mais liés. Chaque container, spécialisé, demandera beaucoup moins de travail de mise au point. Il est assez courant de pouvoir alors utiliser des images standards.

Le fait de découpler les applications en plusieurs containers rend plus difficile leur déploiement. Il faut gérer l’ordre de démarrage des containers pour que les liens entre containeurs soient opérants.

Orchestrer l’application

docker-compose intervient pour simplifier la gestion des dépendances entre les containers de l’application et gérer la séquence de démarrage.

Il propose un fichier de configuration de l’application (au format yaml) qui définit les containers utilisés et leurs relations.

Chaque service (container) doit choisir entre une image ou un build qui sera utilisé par le container. Il peut ensuite préciser les liens entre les containeurs.

Exemple:

web:
  build: .
  links:
    - db
  ports:
    - "8000:8000"
db: 
  image: postgres

Cette application est composée de deux containers. Le premier, web, est démarré depuis une image construite par un Dockerfile local. Le second est instantié depuis l’image standard postgres.

Au lancement de la commande docker-compose up:

  • l’image du premier containeur sera construite,
  • le container db sera démarré depuis l’image postgres,
  • le container web sera démarré avec le lien vers la base de données.

Vers la maturité de Docker

La technologie Docker est encore très récente. Les premières livraisons de Docker ont connu un énorme succès parce qu’elles simplifiaient la livraison d’environnements stables. Cette nouvelle étape marque un passage vers la maturité du modèle en repoussant les premières limitations rencontrées.

One Comment

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>