Docker-compose utilise un langage descriptif en YAML qui a pas mal évolué au fil du temps avec la technologie. De ce fait, certaines fonctionnalités peuvent être amenés à disparaître selon la version.

Il existe actuellement 3 versions pour écrire son docker-compose.yml :

  • V1 : version originale qui se déclare très simplement sans mettre d'information particulière a part le nom des machines et les options
  • V2 : Cette version rajoute des notions de networking : les machines sont maintenant déclarés dans un pool de services, et font donc partie de ce réseau, isolé des autres containers qui pourraient être lancés autrement ou avec un autre fichier docker-compose. Il est de même possible de spécifier des réseaux et d'être donc plus granulaire en terme de séparation au sein même d'un fichier compose. Faire une upgrade de la V1 vers la V2 demande uniquement le rajoute de l'entête version : '2' dans le fichier.
  • V3 : la dernière version, qui est orientée "swarm" (utilisations de clusters applicatifs). Afin d'obtenir une compatibilité avec swarm, certaines notions ont dû changer, et de fait certaines options existant en V2 on disparu, à savoir
    • volume_driver, volumes_from, cpu_shares, cpu_quota, cpuset, mem_limit, memswap_limit, extends, group_add

les "named volumes" apparus en V2 prennent donc définitivement le pas sur le mapping traditionnel dit dossier à dossier permettant d'exposer un dossier particulier directement sur la machine physique. Cela peut donc mener à pas mal de confusion à la rédaction du dockerfile.

Le style ayant fortement divergé entre la V2 et la V3, les équipes de dev Docker ont décidé de maintenir la V2 pendant encore longtemps (la fin de maintenance n'étant pas prévue pour tout de suite (en anglais)
. Cela veut donc dire que selon votre cas d'utilisation, il est toujours acceptable d'utiliser du docker-compose V2 (notamment si vous avez besoin des options ayant disparues comme volumes_from pour des raisons de simplicité d'utilisation.

Par exemple, ce site ayant pour but d'être déployé sur un et un seul système, rend la syntaxe V3 inutile. Il est cependant recommandé par défaut d'utiliser la syntaxe en V3

Lors du prochain article, je vous présenterai les services présents sur ce système afin de vous permettre d'en répliquer la configuration.