Aller au contenu

Docker Compose

Définition

Docker Compose permet de :

  1. manipuler facilement une pile logicielle complète (plusieurs conteneurs en interaction)
  2. créer un réseau pour les composants de cette même pile.

Exemple

Issu d'un exemple générique d'un tuto DevSecOps.

services:
  service1: # Nom du premier service
    image: nom_de_l_image # Image Docker utilisée pour ce service
    ports:
      - "port_hôte:port_conteneur" # Mappage des ports
    environment:
      - VARIABLE_1=valeur_1 # Variables d'environnement
    volumes:
      - /chemin/hote:/chemin/conteneur # Mappage de volumes
    depends_on:
      - service2 # Dépendances entre les services

  service2:
    # Configuration du deuxième service
    # ...

networks:
  mynetwork: # Définition d'un réseau personnalisé
    driver: bridge # Type de réseau
volumes:
workspace:

Toutes les spécifications sont données par compose-spec.json qui utilise le schéma https://json-schema.org/draft/2019-09/schema#.

Premier fichier Compose

Lancer une application de micro-service via Docker Compose :

  • Copier le fichier docker-compose.yml qui permet de lancer un seul service, le serveur Jupyter :

    services:
      jupyter:
        image: myjupyter
        container_name: jupyter
        volumes:
        - $LOCAL_PATH:/home/jovyan/work/local
        ports:
        - "127.0.0.1:8888:8888"
    

    Remarque

    Il est possible de trouver version: "3" en haut des fichiers docker-compose.yml, cela a été supprimé depuis Docker Compose v2 (2022) qui utilise toujours le dernier schéma des fichiers Compose.

  • Exporter la variable d’environnement LOCAL_PATH :

    export LOCAL_PATH=`pwd`
    

    Remarque

    Il est préférable d'utiliser un fichier .env pour gérer les variables d'environement. Il suffit de le mettre dans le même répertoire que docker-compose.yml.

  • Exécuter le fichier YAML avec Docker Compose :

    docker compose up -d &&\
    docker-compose ps &&\
    docker compose logs jupyter
    
  • Exécuter des instructions dans le conteneur :

    docker compose exec jupyter
    
  • Terminer la pile logicielle :

    docker compose down
    

Deuxième fichier Compose : utilisation avancée

  • avec les balises, les sondes healthcheck

Vers Kubernetes

Kompose permet de convertir un descripteur docker-compose.yml en manifestes Kubernetes. Pour cela, il faut un peu modifier le fichier docker-compose.yml pour gérer proprement l'export du volume.

services:
  jupyter:
    image: myjupyter
    container_name: jupyter
    volumes:
    - $PWD/data_jupyter:/home/jovyan/work/local
    ports:
    - "127.0.0.1:8888:8888"
  • Pour installer Kompose :
brew install kompose

ou télécharge directement le binaire

curl -L https://github.com/kubernetes/kompose/releases/download/v1.35.0/kompose-linux-amd64 -o ~/.local/bin/kompose &&\
chmod +x ~/.local/bin/kompose
  • Pour convertir le fichier Docker Compose en manifeste :
kompose --file docker-compose.yml convert

Et cela produit 3 fichiers que nous utiliserons dans la partie sur Kubernetes :

jupyter-service.yaml
jupyter-deployment.yaml
jupyter-claim0-persistentvolumeclaim.yaml
Authors: Cécile Cavet