Skip to content

Docker Compose

Présentation

Docker Compose est un outil permettant de définir et de gérer des applications complexe, comme par exemple une architecture en micro services.

Le principe de base de l'outil consiste à décrire dans un fichier yml l'ensemble des services qui composent notre stack technique et qui sera ensuite lu par un binaire écrit en python docker-compose.

Le fichier compose.yml

Un fichier docker-compose décrit les composants d'une stack technique comme les services, volumes, networks, etc.

Voici un exemple de configuration :

yml
version: "3.9"
    
services:
  db:
    image: mariadb:latest
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    networks:
      - local:
    restart: always
    
  wordpress:
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8000:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    networks:
      - local:
    restart: always
    depends_on:
      - db

  phpmyadmin:
    image: phpmyadmin:phpmyadmin
    ports:
      - "8001:80"
    networks:
      - local:
    restart: always
    depends_on:
      - db

volumes:
  db_data:
  wordpress_data:

networks:
  local:
  • On commence par spécifier la version du fichier, ici 3.9. Cette version doit être définie en corrélation avec la version du daemon de Docker. Toutefois depuis la versoin 25.05, cet argument n'est plus nécessaire et génère un warning.

  • On déclare ensuite un ensemble de services : db, wordpress, phpmyadmin. Chacun de se ces services sont basées sur une image et à la manière d'une exécution docker-cli possèdent des volumes, des variables d'environnement ou encore des ports.

  • Enfin on déclare les volumes, networks qui sont utilisés par la stack.

Concrètement, le binaire docker-compose (acessible via docker compose sur les versions récentes de Docker) effectue les mêmes opérations que l'on pourrait être amené à écrire via docker-cli. L'ensemble des éléments configurables sont disponibles via la spécification officielle ou encore via la documentation de Docker. Les principaux intérêts de l'outil sont de permettre de lancer les applications via docker-compose up indépendamment du langage, de la plateforme utilisée ou encore de créer des stacks en fonction des environnements d'éxécution.

Malheureusement, la richesse de l'outil, tout comme son évolution constante ne permet pas d'en sortir un résumé efficace et surtout suivi dans le temps. Toutefois, la documentation officielle couvre parfaitement l'ensemble des possibilités.

9.3 Le binaire docker-compose

Le binaire docker-compose permet de gérer le cycle de vie de l'application au format Compose. Son installation est indépendance de Docker mais il se trouve être packagé par défaut avec Docker-desktop sur Mac, Windows.

La commande docker-compose utilise le format suivant :

shell
docker-compose [-f <arg>...] [--profile <name>...] [options] [COMMAND] [ARGS...]

docker-compose -f docker-compose.yml up -d --force-recreate

L'instruction -f est optionnelle. Elle sert à spécifier le ou les fichiers utilisés par la stack ; là où le binaire recherche par défaut un fichier docker-compose.yml.

Les principales commandes sont les suivantes :

CommandeDescription
up / downCréation / Suppression d'une application (services, volumes, réseaux)
start / stopDémarrage / Arrêt d'une application
buildBuild des images et des services
pullTéléchargement des images
logsVisualisation des logs de l'application
scaleModification du nombre de containers pour un service
psListe les containers de l'application

La liste complète des possibilités de docker peut être obtenue à l'aide de docker compose --help

shell
Define and run multi-container applications with Docker.

Usage:
  docker-compose [-f <arg>...] [--profile <name>...] [options] [COMMAND] [ARGS...]
  docker-compose -h|--help

Options:
  -f, --file FILE             Specify an alternate compose file
                              (default: docker-compose.yml)
  -p, --project-name NAME     Specify an alternate project name
                              (default: directory name)
  --profile NAME              Specify a profile to enable
  --verbose                   Show more output
  --log-level LEVEL           Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
  --no-ansi                   Do not print ANSI control characters
  -v, --version               Print version and exit
  -H, --host HOST             Daemon socket to connect to

  --tls                       Use TLS; implied by --tlsverify
  --tlscacert CA_PATH         Trust certs signed only by this CA
  --tlscert CLIENT_CERT_PATH  Path to TLS certificate file
  --tlskey TLS_KEY_PATH       Path to TLS key file
  --tlsverify                 Use TLS and verify the remote
  --skip-hostname-check       Don't check the daemon's hostname against the
                              name specified in the client certificate
  --project-directory PATH    Specify an alternate working directory
                              (default: the path of the Compose file)
  --compatibility             If set, Compose will attempt to convert deploy
                              keys in v3 files to their non-Swarm equivalent

Commands:
  build              Build or rebuild services
  bundle             Generate a Docker bundle from the Compose file
  config             Validate and view the Compose file
  create             Create services
  down               Stop and remove containers, networks, images, and volumes
  events             Receive real time events from containers
  exec               Execute a command in a running container
  help               Get help on a command
  images             List images
  kill               Kill containers
  logs               View output from containers
  pause              Pause services
  port               Print the public port for a port binding
  ps                 List containers
  pull               Pull service images
  push               Push service images
  restart            Restart services
  rm                 Remove stopped containers
  run                Run a one-off command
  scale              Set number of containers for a service
  start              Start services
  stop               Stop services
  top                Display the running processes
  unpause            Unpause services
  up                 Create and start containers
  version            Show the Docker-Compose version information