Gestion des applications multiconteneurs à l'aide de docker-compose
- 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 :
Exécutez la commande :
>
sudo
transactional-update pkg install podman*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 :
Installez le paquet
podman-docker
en exécutant la commande suivante :transactional-update pkg install podman-docker
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.
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 :
Exécutez la commande :
>
sudo
transactional-update pkg install docker-composeUne 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 :
Créez le fichier de configuration
compose.yml
. Pour plus d'informations, reportez-vous à la Section 2.1, « Création decompose.yml
».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.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.
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 documentconfigs
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 :
Vérifiez que le conteneur que vous envisagez d'exécuter n'existe pas encore :
>
podman ps --allSi nécessaire, supprimez le conteneur en question :
>
podman rm -fCONTAINER_IDDémarrez l'application multiconteneurs en exécutant la commande suivante à partir du répertoire contenant le fichier
compose.yml
:>
docker compose up -ddocker-compose crée un réseau distinct pour l'application multi-conteneur.
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
4 Mentions légales #
Copyright © 2006–2024 SUSE LLC et contributeurs. Tous droits réservés.
Il est autorisé de copier, distribuer et/ou modifier ce document conformément aux conditions de la licence de documentation libre GNU version 1.2 ou (à votre discrétion) 1.3, avec la section permanente qu'est cette mention de copyright et la licence. Une copie de la version de licence 1.2 est incluse dans la section intitulée « Licence de documentation libre GNU ».
Pour les marques commerciales SUSE, consultez le site Web https://www.suse.com/company/legal/. Toutes les autres marques de fabricants tiers sont la propriété de leur détenteur respectif. Les symboles de marque (®, ™, etc.) désignent des marques commerciales de SUSE et de ses sociétés affiliées. Des astérisques (*) désignent des marques commerciales de fabricants tiers.
Toutes les informations de cet ouvrage ont été regroupées avec le plus grand soin. Cela ne garantit cependant pas sa complète exactitude. Ni SUSE LLC, ni les sociétés affiliées, ni les auteurs, ni les traducteurs ne peuvent être tenus responsables des erreurs possibles ou des conséquences qu'elles peuvent entraîner.