Accéder au contenuNavigation Accéder à la page : page précédente [raccourci clavier p] / page suivante [raccourci clavier n]
documentation.suse.com / Gestion des applications multiconteneurs à l'aide de docker-compose

Gestion des applications multiconteneurs à l'aide de docker-compose

Date de publication : 12 déc 2024
CONTENU

docker-compose vous permet de définir et de gérer une application multiconteneurs. L'outil simplifie le déploiement d'une telle pile d'applications en utilisant un fichier de définition facile à utiliser.

MOTIF

Cet article décrit comment créer une application multiconteneurs à l'aide de docker-compose.

EFFORT

La lecture de l'article prend environ 20 minutes.

OBJECTIF

Vous pourrez créer votre propre pile d'applications basée sur des conteneurs.

CONDITIONS REQUISES

Images de conteneur d'application ou fichiers sources associés utilisés pour créer l'application.

1 Outils impliqués dans la gestion des applications multiconteneurs

docker-compose est l'outil responsable de la création de l'application multiconteneurs. Par défaut, il utilise Docker, qui n'est pas présent sur SLE Micro. Pour contourner Docker et utiliser Podman à la place, l'outil utilise le script podman-docker. Par conséquent, vous n'avez pas besoin de modifier vos scripts existants pour qu'ils utilisent Podman au lieu de Docker. Les sections suivantes fournissent des descriptions détaillées des outils.

1.1 À propos de Podman

Podman est un nom abrégé pour Pod Manager Tool. Il s'agit d'un moteur de conteneur sans daemon qui vous permet d'exécuter et de déployer des applications à l'aide de conteneurs et d'images de conteneurs. Podman fournit une interface de ligne de commande pour gérer les conteneurs.

Comme Podman n'a pas de daemon, il fournit une intégration avec systemd. Cela permet de contrôler les conteneurs via des unités systemd. Vous pouvez créer ces unités pour des conteneurs existants, mais aussi générer des unités qui peuvent lancer des conteneurs s'ils n'existent pas sur le système. Podman peut exécuter systemd dans des conteneurs.

Podman vous permet d'organiser vos conteneurs en pods. Les pods partagent la même interface réseau et les mêmes ressources. Un cas d'utilisation typique pour organiser un groupe de conteneurs dans un pod est un conteneur qui exécute une base de données et un conteneur avec un client qui accède à la base de données.

1.1.1 Installation de Podman

Podman est inclus par défaut dans SLE Micro. Toutefois, si Podman n'est pas présent, vous pouvez l'installer comme décrit ci-dessous :

  1. Exécutez la commande :

    > sudo transactional-update pkg install podman*
  2. Redémarrez votre système pour démarrer dans le nouvel instantané.

1.2 À propos de podman-docker

podman-docker est un script bash qui transforme toute commande docker exécutée en une commande podman correspondante avec les mêmes arguments transmis. Par conséquent, vous pouvez utiliser tous vos scripts Docker sans aucune modification.

1.2.1 Installation de podman-docker

podman-docker n'est pas installé sur SLE Micro par défaut. Pour l'installer, procédez comme suit :

  1. Installez le paquet podman-docker en exécutant la commande suivante :

    transactional-update pkg install podman-docker
  2. Redémarrez le système pour basculer vers le dernier instantané.

1.3 À propos de docker-compose

docker-compose est un outil de gestion d'applications multiconteneurs. docker-compose vous permet de disposer de plusieurs environnements isolés sur un hôte unique, tout en prenant en charge l'utilisation de variables entre les environnements. À l'aide de docker-compose, vous pouvez recréer uniquement les conteneurs qui ont été modifiés sans détruire l'ensemble de l'application multiconteneurs.

Important
Important : remplacement de docker avec la commande podman

Sous SLE Micro, le script podman-docker permet d'appeler Podman chaque fois que vous exécutez docker-compose, car Docker n'est pas présent sous SLE Micro.

1.3.1 Installation de docker-compose

Si docker-compose n'est pas présent sur votre système, vous pouvez l'installer en procédant comme suit :

  1. Exécutez la commande :

    > sudo transactional-update pkg install docker-compose
  2. Une fois l'installation terminée, redémarrez votre système pour le lancer dans le nouvel instantané.

2 Création d'une application multiconteneurs

Pour créer une application multiconteneurs, procédez comme suit :

  1. Créez le fichier de configuration compose.yml. Pour plus d'informations, reportez-vous à la Section 2.1, « Création de compose.yml ».

  2. Préparez la structure de répertoires requise. Nous vous recommandons de placer le fichier compose.yml en haut de votre répertoire de travail.

  3. Si nécessaire, écrivez vos propres fichiers conteneurs spécifiques aux services utilisés par l'application conteneurisée. Par exemple, pour déployer une application Go, créez un fichier conteneur pour l'application Go avec la configuration et les dépendances requises.

    Nous vous recommandons de créer un sous-répertoire par service dans le répertoire de travail et d'y placer les fichiers spécifiques au service.

  4. Déployez l'application multiconteneurs. Pour plus d'informations, reportez-vous à la Section 2.2, « Déploiement d'applications multiconteneurs ».

2.1 Création de compose.yml

Pour créer l'application multiconteneurs, vous devez créer un fichier compose.yml placé de préférence dans le répertoire de travail. Il peut s'agir d'un fichier unique ou vous pouvez utiliser une approche plus granulaire en utilisant des fragments et des extensions. Plusieurs fichiers docker-compose peuvent également être fusionnés pour définir l'ensemble du modèle d'application.

Le fichier compose.yml définit votre application. Vous pouvez inclure les parties suivantes.

service

Un service est un composant informatique de l'application. Pour plus de détails sur la définition, reportez-vous à la Section 2.1.1, « Définition des services ».

réseaux

Vous pouvez utiliser l'instruction network pour définir des réseaux personnalisés et assigner des services particuliers à des réseaux personnalisés. Pour plus d'informations, reportez-vous à la Section 2.1.2, « Définition des réseaux ».

volumes

Répertoire géré par le moteur de conteneur dans lequel les services stockent et partagent des données.

Variables d'environnement

Il se peut que vous deviez également utiliser une liste de variables d'environnement qui seront transmises à vos services. Pour plus de détails, reportez-vous au document environment variables reference.

configs

Tous les fichiers de configuration requis par les services doivent être déclarés dans la section configs. Pour plus de détails, reportez-vous au document configs definition.

2.1.1 Définition des services

Lorsque vous définissez des services, vous devez soit spécifier une image de conteneur à utiliser, soit fournir des fichiers sources pour créer le service à partir de ces derniers.

Pour créer le conteneur de services à partir d'une image, utilisez l'instruction image :

services:
       db:
         image: database

Podman vérifie si le nom de l'image déclaré dans le fichier compose.yml est disponible dans le stockage de conteneur local. Si ce n'est pas le cas, Podman extrait l'image de l'un des registres configurés.

Pour créer un service à partir de fichiers sources, fournissez ces derniers et créez un fichier conteneur dans le même répertoire. Dans le fichier compose.yml, utilisez l'instruction build :

      services:
        db: 
          build: PATH_TO_SOURCE_FILES

Si un service particulier doit être démarré après un autre, vous pouvez utiliser l'instruction depends_on :

      services:
       db:
         image: database
         depends_on:
          system:
            condition: SERVICE_CONDITION

La valeur SERVICE_CONDITION peut être l'une des suivantes : service_started, service_healthy ou service_completed_successfully.

Pour plus d'informations concernant la définition de services, consultez le document services specification.

2.1.2 Définition des réseaux

Par défaut, docker-compose crée un réseau par défaut et chaque conteneur de la pile d'applications est inclus dans le réseau. Le réseau par défaut ne doit pas être déclaré dans le fichier compose.yml, car docker-compose le crée automatiquement.

Vous pouvez également définir des réseaux personnalisés et leur assigner des services particuliers. Par exemple, pour créer deux réseaux, network1 et network2, ajoutez l'extrait de code suivant :

networks:
  network1:
    # Use a custom driver
    driver: custom-driver-1
  network2:
    # Use a custom driver and name the network
    driver: custom-driver-2
    name: custom_network

Vous pouvez également utiliser un réseau existant. Dans ce cas, marquez le réseau comme externe :

networks:
  network1:
    name: network1
    external: true

Pour une spécification complète de networks, reportez-vous au document networks specification.

2.1.3 Exemple de fichier compose.yml

L'exemple suivant de fichier compose.yml définit une pile d'applications qui utilise le système de surveillance Prometheus et le système d'analyse Grafana.

services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
    ports:
      - 9090:9090
    restart: unless-stopped
    volumes:
      - ./prometheus:/etc/prometheus
      - prom_data:/prometheus
  grafana:
    image: grafana/grafana
    container_name: grafana
    ports:
      - 3000:3000
    restart: unless-stopped
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=grafana
    volumes:
      - ./grafana:/etc/grafana/provisioning/datasources
volumes:
  prom_data:

La structure du projet dans cet exemple doit se présenter comme suit :

.
├── compose.yaml
├── grafana
│   └── datasource.yml
├── prometheus
│   └── prometheus.yml
└── README.md

2.2 Déploiement d'applications multiconteneurs

Après avoir créé la structure de répertoires et le fichier compose.yml appropriés, vous pouvez déployer l'application multiconteneurs :

  1. Vérifiez que le conteneur que vous envisagez d'exécuter n'existe pas encore :

    > podman ps --all

    Si nécessaire, supprimez le conteneur en question :

    > podman rm -fCONTAINER_ID
  2. Démarrez l'application multiconteneurs en exécutant la commande suivante à partir du répertoire contenant le fichier compose.yml :

    > docker compose up -d

    docker-compose crée un réseau distinct pour l'application multi-conteneur.

  3. Vous pouvez vérifier que les conteneurs sont en cours d'exécution et que les ports sont assignés en répertoriant les conteneurs en cours d'exécution :

    > podman ps

3 Gestion d'une application multiconteneurs

Après avoir créé votre application multiconteneurs, vous pouvez utiliser la commande docker-compose pour effectuer des opérations de gestion. La syntaxe de la commande est la suivante :

> docker compose[OPTIONS]COMMAND

Exécutez la commande à partir du répertoire où se trouve le fichier compose.yml de l'application multiconteneurs que vous souhaitez gérer. Vous pouvez également fournir un chemin d'accès au fichier compose.yml à l'aide de l'option -f, --file. Par exemple, pour quitter et supprimer l'application multiconteneurs :

> docker compose -f ./test/compose.yml down

Autres commandes utiles :

images

Permet de lister toutes les images utilisées par les conteneurs dans l'application multiconteneurs.

> docker compose images
pause

Permet de mettre en pause tous les conteneurs.

> docker compose pause[SERVICE]
ps

Permet de lister les conteneurs dans l'application multiconteneurs.

> docker compose ps
rm

Permet de supprimer les conteneurs arrêtés.

> docker compose rm
start/stop

Permet de démarrer ou d'arrêter des conteneurs.

> docker compose stop[SERVICE]

Pour obtenir la liste complète des options et commandes, exécutez :

> docker-compose --help