Guide pour Débutants sur l'Installation et l'Utilisation de Docker Compose

DockerBeginner
Pratiquer maintenant

Introduction

Ce guide pour débutants vous guidera à travers le processus d'installation de Docker et de Docker Compose, et vous apprendra à utiliser Compose pour définir, déployer et gérer vos applications. Vous découvrirez les fonctionnalités et options de configuration clés disponibles dans Docker Compose, ainsi que les meilleures pratiques pour l'échelle et la charge équilibrée de vos applications Compose.

Qu'est-ce que Docker Compose ?

Docker Compose est un outil qui vous permet de définir et d'exécuter des applications Docker multi-conteneurs. Il simplifie le processus de gestion et d'orchestration de plusieurs conteneurs Docker en fournissant un moyen déclaratif de définir les services, les réseaux et les volumes de l'application.

Avec Docker Compose, vous pouvez :

Définir les services de votre application

Vous pouvez définir les différents services qui composent votre application, tels qu'un serveur web, une base de données et une file d'attente de messages, dans un seul fichier YAML. Ce fichier, appelé « fichier Compose », décrit la configuration de chaque service, y compris l'image Docker à utiliser, les ports réseau à exposer et toutes les variables d'environnement ou volumes à monter.

Gérer le cycle de vie de votre application

Docker Compose fournit des commandes pour démarrer, arrêter et gérer le cycle de vie de l'ensemble de votre application. Vous pouvez utiliser docker-compose up pour créer et démarrer tous les services définis dans votre fichier Compose, et docker-compose down pour les arrêter et les supprimer.

Simplifier le développement et les tests

Docker Compose est particulièrement utile pendant les phases de développement et de tests de votre application. Il vous permet de facilement démarrer un environnement de développement complet avec tous les services nécessaires, ce qui facilite le test de votre application de manière cohérente et reproductible.

graph TD A[Développeur] --> B[Docker Compose] B --> C[Serveur Web] B --> D[Base de données] B --> E[File d'attente de messages]

En utilisant Docker Compose, vous pouvez vous assurer que votre application fonctionne de la même manière dans différents environnements, du développement à la production, réduisant ainsi le risque de problèmes spécifiques à l'environnement.

Service Image Ports Environnement
Serveur Web nginx:latest 80:80 -
Base de données mysql:5.7 3306:3306 MYSQL_ROOT_PASSWORD=password
File d'attente rabbitmq:3-management 5672:5672, 15672:15672 -

En résumé, Docker Compose est un outil puissant qui simplifie la gestion et le déploiement d'applications Docker multi-conteneurs, ce qui facilite le développement, les tests et l'exécution d'applications complexes de manière cohérente et reproductible.

Installation de Docker et Docker Compose

Avant de pouvoir utiliser Docker Compose, vous devez installer Docker et Docker Compose sur votre système. Dans cette section, nous vous guiderons à travers le processus d'installation sur un système Ubuntu 22.04.

Installation de Docker

  1. Mettez à jour l'index des paquets :
sudo apt-get update
  1. Installez les paquets nécessaires pour permettre à APT d'utiliser un dépôt via HTTPS :
sudo apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  1. Ajoutez la clé GPG officielle de Docker :
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  1. Configurez le dépôt Docker :
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Installez Docker Engine :
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  1. Vérifiez l'installation en exécutant la commande suivante :
sudo docker run hello-world

Installation de Docker Compose

Docker Compose est installé dans le cadre du processus d'installation de Docker Engine sur Ubuntu 22.04. Toutefois, si vous devez installer une version spécifique de Docker Compose, vous pouvez suivre ces étapes :

  1. Téléchargez la dernière version de Docker Compose :
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. Appliquez les permissions exécutables au binaire Docker Compose :
sudo chmod +x /usr/local/bin/docker-compose
  1. Vérifiez l'installation en exécutant la commande suivante :
docker-compose --version

Maintenant que Docker et Docker Compose sont installés, vous êtes prêt à commencer à définir et déployer vos applications multi-conteneurs à l'aide de Docker Compose.

Définition des services dans un fichier Compose

Le cœur d'une application Docker Compose réside dans le fichier Compose, écrit en format YAML. Dans ce fichier, vous définissez les différents services qui composent votre application, ainsi que leurs configurations.

Définition des services

Chaque service dans votre fichier Compose est défini comme une clé de niveau supérieur, telle que web, db ou redis. Sous chaque service, vous pouvez spécifier diverses options de configuration, telles que l'image Docker à utiliser, les ports réseau à exposer, les variables d'environnement, et plus encore.

Voici un exemple de fichier Compose simple avec trois services :

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./app:/usr/share/nginx/html

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - db-data:/var/lib/mysql

  redis:
    image: redis:latest
    ports:
      - 6379:6379

volumes:
  db-data:

Dans cet exemple, nous avons trois services :

  1. web : Exécute la dernière version du serveur web Nginx, mappe le port 80 de l'hôte au port 80 dans le conteneur, et monte le répertoire ./app de l'hôte vers le répertoire /usr/share/nginx/html dans le conteneur.

  2. db : Exécute la base de données MySQL 5.7, définit la variable d'environnement MYSQL_ROOT_PASSWORD à password, et monte un volume nommé db-data pour stocker les données de la base de données.

  3. redis : Exécute la dernière version du magasin de données mémoire Redis, mappe le port 6379 de l'hôte au port 6379 dans le conteneur.

Volumes et réseaux

En plus de définir les services, le fichier Compose vous permet également de définir des volumes et des réseaux partagés qui peuvent être utilisés par les services.

Dans l'exemple ci-dessus, nous avons défini un volume nommé db-data pour stocker les données de la base de données MySQL. Ce volume peut être partagé entre plusieurs services, garantissant que les données persistent même si les conteneurs sont arrêtés ou recréés.

Vous pouvez également définir des réseaux personnalisés pour contrôler la connectivité entre vos services. Ceci est utile lorsque vous souhaitez isoler certains services ou créer une topologie réseau plus complexe.

En utilisant un fichier Compose, vous pouvez facilement définir et gérer les différents composants de votre application, ce qui facilite le déploiement, le dimensionnement et la maintenance de vos applications Docker multi-conteneurs.

Déploiement et gestion des applications Compose

Une fois que vous avez défini vos services dans un fichier Compose, vous pouvez utiliser les commandes Docker Compose pour déployer et gérer votre application.

Déploiement de l'application

Pour déployer votre application, accédez au répertoire contenant votre fichier Compose et exécutez la commande suivante :

docker-compose up -d

L'option -d exécute les conteneurs en mode détaché, ce qui signifie qu'ils s'exécuteront en arrière-plan.

Docker Compose lira le fichier Compose, créera le réseau et les volumes Docker nécessaires, et démarrera tous les services définis.

Gestion du cycle de vie de l'application

Après le déploiement de votre application, vous pouvez utiliser les commandes Docker Compose suivantes pour gérer son cycle de vie :

  • docker-compose stop : Arrête tous les services en cours d'exécution.
  • docker-compose start : Démarre les services arrêtés.
  • docker-compose restart : Redémarre tous les services en cours d'exécution.
  • docker-compose down : Arrête et supprime tous les services, réseaux et volumes.

Par exemple, pour arrêter l'application, vous pouvez exécuter :

docker-compose stop

Et pour la redémarrer, vous pouvez exécuter :

docker-compose start

Mise à l'échelle des services

Docker Compose facilite la mise à l'échelle de vos services vers le haut ou vers le bas. Pour mettre à l'échelle un service spécifique, vous pouvez utiliser la commande scale :

docker-compose scale web=3 db=2

Cela mettra à l'échelle le service web à 3 instances et le service db à 2 instances.

Vous pouvez également utiliser la commande up avec l'option --scale pour mettre à l'échelle les services lors du déploiement de l'application :

docker-compose up --scale web=3 --scale db=2 -d

Affichage des journaux

Pour afficher les journaux de votre application, vous pouvez utiliser la commande logs :

docker-compose logs

Cela affichera les journaux de tous les services. Vous pouvez également afficher les journaux d'un service spécifique en spécifiant le nom du service :

docker-compose logs web

En utilisant ces commandes Docker Compose, vous pouvez facilement déployer, gérer et mettre à l'échelle vos applications multi-conteneurs, ce qui facilite le développement, les tests et l'exécution d'applications complexes de manière cohérente et reproductible.

Fonctionnalités et configurations avancées de Compose

Bien que la structure et les commandes de base de Compose soient puissantes, Docker Compose offre également une série de fonctionnalités et d'options de configuration avancées pour vous aider à créer des applications plus complexes et robustes.

Variables d'environnement et secrets

Vous pouvez utiliser des variables d'environnement pour transmettre des paramètres de configuration à vos services. Docker Compose prend en charge les variables d'environnement à la fois au moment de la compilation et à l'exécution, qui peuvent être définies au niveau du service ou global.

De plus, vous pouvez utiliser les secrets Docker pour stocker en toute sécurité des informations sensibles, telles que les mots de passe de base de données ou les clés API, et les rendre disponibles à vos services.

version: "3"
services:
  web:
    image: myapp/web
    environment:
      - DATABASE_URL=mysql://root:${DB_PASSWORD}@db/myapp
    secrets:
      - db-password

secrets:
  db-password:
    file: ./db-password.txt

Gestion des dépendances et tests de santé

Docker Compose vous permet de définir des dépendances entre les services, garantissant que les services sont démarrés dans le bon ordre et que les services dépendants sont en bon état avant le démarrage d'autres services.

Vous pouvez également configurer des tests de santé pour vos services, ce qui permet à Compose de surveiller l'état de santé de vos conteneurs et de prendre les mesures appropriées, telles que le redémarrage des conteneurs en mauvais état.

version: "3"
services:
  web:
    image: myapp/web
    depends_on:
      db:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 30s
      timeout: 10s
      retries: 5

  db:
    image: mysql:5.7
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 30s
      timeout: 10s
      retries: 5

Réseaux et découverte de services

Docker Compose crée automatiquement un réseau par défaut pour votre application, mais vous pouvez également définir des réseaux personnalisés et contrôler la configuration réseau de vos services.

De plus, Compose fournit une découverte de services intégrée, permettant à vos services de trouver et de communiquer entre eux en utilisant les noms de service définis dans le fichier Compose.

version: "3"
services:
  web:
    image: myapp/web
    networks:
      - frontend
    environment:
      - DB_HOST=db

  db:
    image: mysql:5.7
    networks:
      - backend

networks:
  frontend:
  backend:

En tirant parti de ces fonctionnalités avancées, vous pouvez créer des applications Docker Compose plus complexes, plus robustes et plus évolutives qui répondent aux besoins de votre organisation.

Mise à l'échelle et équilibre de charge avec Compose

L'un des principaux avantages de l'utilisation de Docker Compose est la possibilité de mettre facilement à l'échelle vos services et d'implémenter l'équilibrage de charge. Dans cette section, nous explorerons comment atteindre ces capacités.

Mise à l'échelle des services

Comme mentionné précédemment, vous pouvez mettre à l'échelle vos services vers le haut ou vers le bas à l'aide de la commande scale. Ceci est particulièrement utile lorsque vous devez gérer une augmentation du trafic ou des demandes de ressources.

Par exemple, supposons que vous ayez un service web défini dans votre fichier Compose :

version: "3"
services:
  web:
    image: myapp/web
    ports:
      - 80:80

Pour mettre à l'échelle le service web à 3 instances, vous pouvez exécuter la commande suivante :

docker-compose scale web=3

Cela créera deux instances supplémentaires du service web, vous permettant de répartir la charge sur plusieurs conteneurs.

Équilibrage de charge

Docker Compose fournit également des capacités d'équilibrage de charge intégrées. Lorsque vous définissez plusieurs instances d'un service, Compose équilibrera automatiquement la charge des requêtes entrantes entre les conteneurs disponibles.

version: "3"
services:
  web:
    image: myapp/web
    ports:
      - 80:80
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure

Dans cet exemple, nous avons défini le service web avec 3 répliques. Lorsque vous exécutez docker-compose up, Compose créera trois instances du service web et équilibrera la charge des requêtes entrantes entre elles.

Vous pouvez également configurer des options d'équilibrage de charge supplémentaires, telles que la politique de redémarrage, pour garantir que votre application reste hautement disponible.

graph TD A[Client] --> B[Load Balancer] B --> C[Web Service 1] B --> D[Web Service 2] B --> E[Web Service 3]

En tirant parti des fonctionnalités de mise à l'échelle et d'équilibrage de charge de Docker Compose, vous pouvez créer des applications hautement évolutives et robustes capables de gérer une augmentation du trafic et des demandes de ressources.

Dépannage et meilleures pratiques

Comme pour toute technologie, vous pouvez rencontrer des problèmes ou des difficultés lors de l'utilisation de Docker Compose. Dans cette section, nous aborderons certaines étapes de dépannage courantes et les meilleures pratiques pour vous aider à gérer efficacement vos applications basées sur Compose.

Dépannage

  1. Vérification des journaux : Si vous rencontrez des problèmes avec votre application Compose, la première étape consiste à vérifier les journaux à l'aide de la commande docker-compose logs. Cela vous aidera à identifier toute erreur ou problème avec vos services.

  2. Inspection des conteneurs : Vous pouvez utiliser la commande docker-compose ps pour lister les conteneurs en cours d'exécution et leur état. Cela peut vous aider à identifier les conteneurs qui ne fonctionnent pas comme prévu.

  3. Débogage des services : Si un service spécifique ne se comporte pas comme prévu, vous pouvez utiliser la commande docker-compose exec pour accéder au conteneur et déboguer le problème. Par exemple, docker-compose exec web bash vous donnera un shell à l'intérieur du conteneur de service web.

  4. Vérification de la configuration : Vérifiez attentivement votre fichier Compose pour vous assurer que les définitions de service, les configurations réseau et les paramètres de volume sont corrects. Vous pouvez utiliser la commande docker-compose config pour valider la syntaxe et la structure de votre fichier Compose.

Meilleures pratiques

  1. Utilisation des variables d'environnement : Utilisez les variables d'environnement pour stocker les paramètres de configuration, tels que les informations d'identification de base de données ou les clés API. Cela facilite la gestion des informations sensibles et l'adaptation de votre application à différents environnements.

  2. Séparation des préoccupations : Envisagez de séparer votre application en services plus petits et plus faciles à gérer. Cela facilitera la mise à l'échelle, la maintenance et les tests des composants individuels de votre application.

  3. Implémentation de tests de santé : Configurez des tests de santé pour vos services afin de garantir que les conteneurs fonctionnent correctement. Cela aidera Compose à surveiller l'état de santé de votre application et à prendre les mesures appropriées, telles que le redémarrage des conteneurs en mauvais état.

  4. Contrôle de version de votre fichier Compose : Stockez votre fichier Compose dans un système de contrôle de version, tel que Git. Cela vous aidera à suivre les modifications, à collaborer avec les membres de l'équipe et à garantir des déploiements cohérents dans différents environnements.

  5. Utilisation judicieuse du réseau : Utilisez les réseaux personnalisés pour isoler et contrôler la connectivité entre vos services. Cela peut améliorer la sécurité et les performances de votre application.

  6. Utilisation de LabEx : Envisagez d'utiliser LabEx, une plateforme puissante qui fournit des fonctionnalités et des outils supplémentaires pour améliorer votre expérience Docker Compose. LabEx peut vous aider à rationaliser le déploiement, la surveillance et la gestion de vos applications basées sur Compose.

En suivant ces étapes de dépannage et ces meilleures pratiques, vous pouvez gérer et maintenir efficacement vos applications Docker Compose, en vous assurant qu'elles fonctionnent correctement et de manière fiable dans divers environnements.

Résumé

À la fin de ce tutoriel, vous aurez une compréhension solide de la manière d'installer et d'utiliser Docker Compose pour rationaliser le déploiement et la gestion de votre application. Vous serez capable de définir vos services, de déployer et de gérer vos applications Compose, et de résoudre les problèmes qui pourraient survenir. Que vous soyez novice en Docker ou que vous cherchiez à améliorer vos compétences en Compose, ce guide vous fournira les connaissances et les outils nécessaires pour commencer à utiliser Docker Compose.