Comment utiliser Docker Compose avec une configuration de réseau hôte

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Ce tutoriel vous guide tout au long de l'utilisation de Docker Compose avec une configuration réseau hôte sur une machine virtuelle (VM) cloud LabEx. Docker Compose est un outil qui vous aide à gérer plusieurs conteneurs — imaginez les conteneurs comme des environnements légers et isolés qui exécutent des applications telles qu'un serveur web. Normalement, Docker isole le réseau d'un conteneur de la machine hôte (la VM sur laquelle vous travaillez), mais l'option de réseau hôte permet au conteneur de partager directement le réseau de l'hôte. Cela est pratique lorsque votre application doit se comporter comme si elle était exécutée directement sur l'hôte, par exemple en accédant aux ports de l'hôte sans configuration supplémentaire. À la fin, vous configurerez Docker Compose, créerez, déployerez et testerez un simple service web en utilisant le réseau hôte. Docker est préinstallé dans votre environnement LabEx, mais nous nous assurerons également que Docker Compose est prêt.

Ce laboratoire nécessite une connexion Internet pour l'apprentissage, donc seuls les utilisateurs Pro peuvent démarrer la VM. Passez à l'offre Pro.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/restart("Restart Container") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/SystemManagementGroup -.-> docker/version("Show Docker Version") subgraph Lab Skills docker/run -.-> lab-394882{{"Comment utiliser Docker Compose avec une configuration de réseau hôte"}} docker/ps -.-> lab-394882{{"Comment utiliser Docker Compose avec une configuration de réseau hôte"}} docker/restart -.-> lab-394882{{"Comment utiliser Docker Compose avec une configuration de réseau hôte"}} docker/logs -.-> lab-394882{{"Comment utiliser Docker Compose avec une configuration de réseau hôte"}} docker/create -.-> lab-394882{{"Comment utiliser Docker Compose avec une configuration de réseau hôte"}} docker/version -.-> lab-394882{{"Comment utiliser Docker Compose avec une configuration de réseau hôte"}} end

Configurer Docker Compose

Avant de plonger dans la configuration, assurons-nous que Docker Compose est disponible sur votre machine virtuelle (VM) cloud LabEx. Bien que Docker soit préinstallé, Docker Compose — un outil distinct pour gérer les configurations multi-conteneurs — peut ne pas l'être. Nous allons l'installer rapidement en utilisant le terminal.

Ouvrez le terminal dans votre VM LabEx. L'invite de commande devrait afficher /home/labex/project — c'est votre répertoire de travail par défaut. Exécutez ces commandes une par une :

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose-install

Voici ce que ces commandes font :

  • curl : Télécharge le binaire Docker Compose à partir de sa version officielle sur GitHub. L'URL utilise $(uname -s)-$(uname -m) pour correspondre au système de votre VM (par exemple, Linux-x86_64). La version 2.20.2 est stable et largement compatible.
  • -o /usr/local/bin/docker-compose : Enregistre le fichier dans /usr/local/bin, un emplacement standard pour les outils exécutables. sudo vous assure que vous avez la permission d'écrire dans cet emplacement.
  • chmod +x : Rend le fichier exécutable, afin que vous puissiez l'exécuter comme une commande. Encore une fois, sudo vous accorde les droits nécessaires.

Pour confirmer que l'installation a réussi, exécutez :

docker-compose --version

Vous devriez voir un résultat comme Docker Compose version v2.20.2. Si vous obtenez le message "commande introuvable", réexécutez les commandes avec attention — vérifiez s'il y a des fautes de frappe ou des problèmes de connexion Internet (la VM a besoin d'accéder à Internet pour télécharger le fichier). Cette étape vous assure que vous êtes prêt à utiliser docker-compose dans les étapes suivantes.

Créer un fichier Docker Compose avec le réseau hôte

Maintenant que Docker Compose est prêt, créons un fichier docker-compose.yml - votre plan pour exécuter un service web avec le réseau hôte. Nous utiliserons nano, un éditeur de texte de terminal simple et adapté aux débutants.

Pour créer et éditer le fichier, suivez ces étapes :

  1. Dans votre terminal, assurez-vous d'être dans le répertoire du projet :

    cd /home/labex/project
  2. Créez et ouvrez le fichier avec nano :

    nano docker-compose.yml
  3. Tapez ou collez le contenu suivant dans nano :

version: "3"
services:
  web:
    image: nginx:latest
    network_mode: host

Voici ce que chaque partie signifie :

  • version: "3" : Définit le format de fichier Docker Compose. La version 3 est une norme commune, comme choisir un modèle.
  • services : Liste les conteneurs (ou "services") à exécuter, comme des travailleurs pour votre projet.
  • web : Nomme votre service - appelez-le comme vous voulez, mais "web" convient bien pour un serveur web.
  • image: nginx:latest : Spécifie le logiciel - Nginx, un serveur web populaire, avec latest qui télécharge la dernière version depuis Docker Hub (une bibliothèque d'images de conteneurs).
  • network_mode: host : Le paramètre clé. Normalement, Docker attribue à chaque conteneur un réseau privé, les isolant de l'hôte. Le mode host permet au conteneur d'utiliser directement le réseau de la machine virtuelle, de sorte que Nginx peut accéder aux ports de l'hôte (comme 80) sans avoir à prendre d'autres mesures.
  1. Pour enregistrer le fichier dans nano :
    • Appuyez sur Ctrl + X pour quitter
    • Appuyez sur Y pour confirmer l'enregistrement des modifications
    • Appuyez sur Entrée pour confirmer le nom de fichier

Le fichier est maintenant enregistré dans /home/labex/project, et vous êtes prêt pour l'étape suivante.

Déployer l'application Docker Compose

Maintenant que votre fichier docker-compose.yml est configuré, déployons le conteneur Nginx — en indiquant à Docker de le démarrer en fonction de votre modèle. Passez au terminal pour cela.

Dans le terminal, à l'emplacement /home/labex/project, exécutez :

docker-compose up -d

Analysons cette commande :

  • docker-compose : L'outil qui lit le fichier docker-compose.yml et gère vos services.
  • up : Démarre le service web (Nginx) défini dans le fichier.
  • -d : Exécute le service en arrière-plan (mode "détaché"), de sorte que votre terminal reste disponible.

Docker Compose téléchargera l'image nginx:latest depuis Docker Hub si elle n'est pas déjà présente sur la VM (vous pourriez voir des messages de téléchargement), puis lancera le conteneur. Vérifiez qu'il est en cours d'exécution avec :

docker ps

Cette commande liste les conteneurs actifs. Recherchez nginx:latest sous "IMAGE" et "Up" sous "STATUS" (par exemple, "Up 5 seconds"). Vous ne verrez pas de mappages de ports (comme 0.0.0.0:80->80/tcp) car network_mode: host utilise directement les ports de l'hôte. Si rien ne s'affiche, assurez-vous que vous êtes dans le répertoire /home/labex/project (pwd pour vérifier) et réexécutez docker-compose up -d.

Tester le service Nginx sur le réseau hôte

Maintenant que le conteneur est en cours d'exécution avec le réseau hôte, testons si Nginx sert des pages web sur le port 80 de l'hôte — le port web standard.

Dans le terminal, à l'emplacement /home/labex/project, exécutez :

curl localhost:80

Voici ce qui se passe :

  • curl : Récupère des données depuis une adresse web, comme un navigateur basé sur le terminal.
  • localhost:80 : Se connecte à la VM elle-même (localhost) sur le port 80. Avec network_mode: host, le Nginx du conteneur utilise le réseau de l'hôte, donc son port 80 est le port 80 de l'hôte.

Vous devriez voir du HTML commençant par <!DOCTYPE html> — la page d'accueil par défaut de Nginx. Normalement, Docker isole les réseaux des conteneurs, ce qui nécessite un mappage de ports (par exemple, le port 80 de l'hôte vers le port 80 du conteneur). Le mode hôte évite cela, permettant à Nginx de se lier directement au port 80 de la VM.

Si vous obtenez le message "connection refused", vérifiez l'Étape 3 — exécutez docker ps pour confirmer que le conteneur est "Up". Redémarrez-le avec docker-compose up -d si nécessaire, ou vérifiez le statut de Docker avec sudo service docker status. Pas de navigateur ici, donc curl est votre outil de test.

Explorer les journaux et nettoyer

Voyons les journaux du conteneur pour voir ce qui se passe à l'intérieur — une compétence essentielle pour la résolution de problèmes — puis nettoyons en le supprimant.

Vérifier les journaux

Exécutez :

docker-compose logs web
  • docker-compose logs : Affiche la sortie de vos services.
  • web : Cible le service web du fichier docker-compose.yml.

Recherchez des lignes telles que "nginx starting" ou "listening on 0.0.0.0:80". Si vous avez utilisé curl, vous pourriez voir "GET /" enregistré. Les erreurs (par exemple, "port 80 failed") s'afficheraient également ici — utile si Nginx s'arrête.

Nettoyer

Exécutez :

docker-compose down
  • docker-compose down : Arrête et supprime le conteneur, libérant le port 80 et nettoyant l'environnement.

Vérifiez avec :

docker ps

L'absence d'une ligne nginx signifie qu'il a été supprimé. S'il reste, réexécutez docker-compose down. Le fichier docker-compose.yml reste en place, vous pouvez donc le redémarrer plus tard avec docker-compose up -d. Cela conclut le cycle de vie : configuration, déploiement, test et suppression.

Résolution de problèmes et meilleures pratiques

Voici comment gérer les problèmes et utiliser Docker Compose de manière judicieuse.

Conseils de résolution de problèmes

  • Le conteneur ne démarre pas : Si docker ps ne renvoie rien, vérifiez docker-compose logs web pour des erreurs telles que "port in use". Libérez le port 80 avec sudo lsof -i :80 et sudo kill <PID>, puis exécutez docker-compose up -d.
  • Pas de réponse de curl : Confirmez que le conteneur est en cours d'exécution (docker ps) et que Docker est lancé (sudo service docker status). Redémarrez avec docker-compose up -d ou sudo service docker restart.
  • Problèmes de fichiers : Si docker-compose up ne trouve pas le fichier, vérifiez que vous êtes dans le répertoire /home/labex/project (pwd) et que le fichier docker-compose.yml existe (ls).

Meilleures pratiques

  • Limitez l'utilisation du réseau hôte : C'est simple, mais cela saute l'isolation, ce qui peut poser des problèmes de sécurité si d'autres services sont en cours d'exécution. Utilisez-le pour les laboratoires, pas en production sauf si nécessaire.
  • Vérifiez les ports avant : Testez avec sudo netstat -tuln | grep :80 — libérez d'abord le port 80.
  • Conservez les fichiers : Sauvegardez le fichier docker-compose.yml dans le répertoire /home/labex/project pour une utilisation ultérieure.
  • Surveillez les journaux : Vérifiez régulièrement les journaux pour détecter les problèmes tôt.

Ces bonnes pratiques rendront votre travail avec Docker plus fiable et vous apprendront les compétences de base.

Résumé

Vous avez installé Docker Compose, créé un fichier docker-compose.yml avec le réseau hôte, déployé un conteneur Nginx, testé celui-ci, vérifié les journaux et nettoyé l'environnement. Le réseau hôte permet aux conteneurs d'utiliser directement le réseau de l'hôte, en sautant l'isolation de Docker — un astuce puissante. Ces étapes constituent une base pour la gestion des applications Docker Compose et la résolution de problèmes, vous préparant ainsi pour des projets plus ambitieux.