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 :

shell 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 l'installer :
brew|apt install kompose
  • Pour convertir le fichier Compose :
kompose --file docker-compose.yaml convert

Et cela produit :

jupyter-service.yaml
jupyter-deployment.yaml
jupyter-cm0-configmap.yaml

Tests avec K3s

WIP

Authors: Cécile Cavet