Comment utiliser la commande docker compose create pour construire et créer des conteneurs

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

Dans ce lab, vous apprendrez à utiliser efficacement la commande docker compose create pour construire et créer des conteneurs à partir d'un fichier docker-compose.yml. Nous commencerons par préparer un fichier docker-compose.yml simple, incluant les étapes nécessaires pour installer Docker Compose dans l'environnement LabEx.

Après la configuration, vous explorerez l'utilisation basique de docker compose create puis approfondirez ses différentes options. Cela inclut la recréation forcée des conteneurs avec --force-recreate, la création de conteneurs sans reconstruire les images en utilisant --no-build, et l'assurance d'utiliser les dernières images avec --pull always. À la fin de ce lab, vous aurez une compréhension solide de comment exploiter docker compose create pour gérer vos applications multi-conteneurs.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555076{{"Comment utiliser la commande docker compose create pour construire et créer des conteneurs"}} docker/ps -.-> lab-555076{{"Comment utiliser la commande docker compose create pour construire et créer des conteneurs"}} docker/rm -.-> lab-555076{{"Comment utiliser la commande docker compose create pour construire et créer des conteneurs"}} docker/create -.-> lab-555076{{"Comment utiliser la commande docker compose create pour construire et créer des conteneurs"}} docker/pull -.-> lab-555076{{"Comment utiliser la commande docker compose create pour construire et créer des conteneurs"}} end

Préparer un fichier docker-compose.yml simple

Dans cette étape, nous allons préparer un fichier docker-compose.yml simple. Avant de commencer, installons Docker Compose. Comme l'environnement VM LabEx n'a pas Docker Compose préinstallé, nous devons l'installer manuellement. Nous allons télécharger le binaire Docker Compose et le rendre exécutable.

Tout d'abord, téléchargez le binaire Docker Compose en utilisant curl. Nous téléchargerons la version 1.29.2, compatible avec la version de Docker installée.

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

Cette commande télécharge le binaire Docker Compose depuis la page officielle des releases GitHub et l'enregistre dans /usr/local/bin/docker-compose. Les parties $(uname -s) et $(uname -m) détectent automatiquement votre système d'exploitation et architecture pour garantir le téléchargement du bon binaire.

Ensuite, nous devons rendre le binaire téléchargé exécutable.

sudo chmod +x /usr/local/bin/docker-compose

Cette commande ajoute les permissions d'exécution au fichier docker-compose, vous permettant de l'exécuter comme une commande.

Maintenant, vérifions que Docker Compose est correctement installé en contrôlant sa version.

docker-compose --version

Vous devriez voir une sortie similaire à docker-compose version 1.29.2, build 5becea4c. Ceci confirme que Docker Compose est installé et prêt à l'emploi.

Maintenant, créons un fichier docker-compose.yml simple dans votre répertoire ~/project. Ce fichier définira un service unique utilisant l'image nginx.

nano ~/project/docker-compose.yml

Cette commande ouvre l'éditeur de texte nano pour créer et éditer le fichier docker-compose.yml. Collez le contenu suivant dans l'éditeur:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

Décomposons ce fichier docker-compose.yml:

  • version: '3.8' spécifie la version du format de fichier Docker Compose.
  • services: définit les services (conteneurs) que vous souhaitez exécuter.
  • web: est le nom de notre service. Vous pouvez choisir n'importe quel nom.
  • image: nginx:latest spécifie l'image Docker à utiliser pour ce service. Ici, nous utilisons la dernière version de l'image officielle Nginx.
  • ports: mappe les ports entre la machine hôte et le conteneur. "80:80" mappe le port 80 de l'hôte vers le port 80 du conteneur. Cela signifie que vous pouvez accéder au serveur web Nginx dans le conteneur en visitant http://localhost dans votre navigateur (ou l'adresse IP de la VM).

Enregistrez le fichier en appuyant sur Ctrl + O, puis Entrée, et quittez l'éditeur avec Ctrl + X.

Vous avez maintenant créé avec succès un fichier docker-compose.yml simple définissant un service web utilisant l'image Nginx. Dans les prochaines étapes, nous utiliserons ce fichier pour créer et gérer des conteneurs.

Créer des conteneurs avec docker compose create

Dans cette étape, nous allons utiliser la commande docker-compose create pour créer des conteneurs basés sur le fichier docker-compose.yml préparé précédemment. La commande docker-compose create crée les conteneurs mais ne les démarre pas. Ceci est utile lorsque vous souhaitez configurer l'environnement des conteneurs sans exécuter immédiatement les services.

Avant de créer le conteneur, assurons-nous que l'image nginx est disponible localement. Si ce n'est pas le cas, Docker Compose la téléchargera automatiquement pendant le processus de création. Cependant, il est recommandé de connaître les images que vous utilisez. Vous pouvez télécharger manuellement l'image avec la commande docker pull :

docker pull nginx:latest

Cette commande télécharge l'image nginx:latest depuis Docker Hub vers votre machine locale. Vous devriez voir une sortie indiquant la progression et la complétion du téléchargement.

Maintenant, naviguez vers le répertoire contenant votre fichier docker-compose.yml. Dans notre cas, c'est le répertoire ~/project.

cd ~/project

Exécutez maintenant la commande docker-compose create :

docker-compose create

Cette commande lit le fichier docker-compose.yml dans le répertoire courant et crée les conteneurs qui y sont définis. Vous devriez voir une sortie indiquant que le conteneur pour le service web est en cours de création.

Une fois la commande terminée, vous pouvez vérifier l'état des conteneurs créés avec la commande docker ps -a.

docker ps -a

La sortie de docker ps -a affichera tous les conteneurs, y compris ceux qui ne sont pas en cours d'exécution. Vous devriez voir un conteneur nommé project_web_1 (le nom est généré à partir du nom du répertoire et du service) avec un statut Created. Ceci confirme que le conteneur a été créé avec succès mais n'est pas encore démarré.

La commande docker-compose create est utile pour pré-provisionner vos conteneurs. Dans les prochaines étapes, nous verrons comment démarrer et gérer ces conteneurs.

Forcer la recréation de conteneurs avec --force-recreate

Dans cette étape, nous allons apprendre à forcer la recréation de conteneurs en utilisant la commande docker-compose create --force-recreate. Le flag --force-recreate permet de recréer les conteneurs même si leur configuration n'a pas changé. Ceci est utile dans des scénarios où vous pourriez avoir besoin de rafraîchir l'instance du conteneur, par exemple après avoir effectué des modifications sur l'image sous-jacente que Docker Compose pourrait ne pas détecter automatiquement.

Tout d'abord, assurez-vous d'être dans le répertoire ~/project où se trouve votre fichier docker-compose.yml.

cd ~/project

Maintenant, exécutez la commande docker-compose create avec le flag --force-recreate :

docker-compose create --force-recreate

Comme nous avons déjà créé le conteneur à l'étape précédente, Docker Compose détectera le conteneur existant. Grâce au flag --force-recreate, il supprimera le conteneur existant et en créera un nouveau avec la même configuration. Vous devriez voir une sortie indiquant que le conteneur existant est supprimé et qu'un nouveau est en cours de création.

Vérifions à nouveau le statut des conteneurs avec docker ps -a.

docker ps -a

Vous devriez toujours voir un conteneur nommé project_web_1 avec le statut Created. Bien que le nom et la configuration soient identiques, il s'agit d'une nouvelle instance de conteneur créée grâce au flag --force-recreate.

Le flag --force-recreate est une option puissante lorsque vous avez besoin de garantir une nouvelle instance de votre conteneur, indépendamment des modifications apportées au fichier docker-compose.yml.

Créer des conteneurs sans construction avec --no-build

Dans cette étape, nous allons explorer l'option docker-compose create --no-build. Ce flag est utile lorsque votre fichier docker-compose.yml inclut des services construits à partir d'un Dockerfile (en utilisant l'instruction build), mais que vous souhaitez uniquement créer les conteneurs sans reconstruire les images. Comme notre fichier docker-compose.yml actuel n'utilise qu'une image pré-construite (nginx:latest), le flag --no-build n'aura pas d'effet visible sur le processus de construction d'image dans ce cas spécifique. Cependant, il est important d'en comprendre l'utilité pour une utilisation future avec des services nécessitant une construction.

Tout d'abord, assurez-vous d'être dans le répertoire ~/project.

cd ~/project

Maintenant, exécutons la commande docker-compose create avec le flag --no-build. Comme le conteneur project_web_1 existe déjà suite aux étapes précédentes, nous utiliserons également le flag --force-recreate pour garantir la création d'un nouveau conteneur.

docker-compose create --no-build --force-recreate

Dans un scénario où votre docker-compose.yml contiendrait un service défini avec une instruction build, l'exécution de cette commande créerait le conteneur en utilisant une image existante (si disponible) ou en la téléchargeant, mais elle ignorerait le processus de construction d'image défini dans le Dockerfile. Dans notre cas actuel, puisque nous utilisons une image pré-construite, le résultat sera similaire à l'étape précédente, indiquant la suppression de l'ancien conteneur et la création d'un nouveau.

Vérifions à nouveau l'état du conteneur.

docker ps -a

Vous devriez toujours voir le conteneur project_web_1 dans l'état Created. Le flag --no-build affecte principalement les services construits à partir d'un Dockerfile, empêchant le processus de construction lors de la création du conteneur.

Créer des conteneurs et récupérer les images avec --pull always

Dans cette étape, nous allons utiliser la commande docker-compose create --pull always. Le flag --pull always indique à Docker Compose de toujours récupérer la dernière version de l'image avant de créer le conteneur, même si une copie locale de l'image existe déjà. Ceci est utile pour s'assurer que vous utilisez toujours l'image la plus récente pour vos services.

Commencez par vous assurer que vous êtes dans le répertoire ~/project.

cd ~/project

Maintenant, exécutez la commande docker-compose create avec le flag --pull always. Comme le conteneur project_web_1 existe déjà, nous utiliserons également le flag --force-recreate pour créer un nouveau conteneur basé sur l'image potentiellement mise à jour.

docker-compose create --pull always --force-recreate

Lorsque vous exécutez cette commande, Docker Compose vérifiera d'abord les mises à jour de l'image nginx:latest sur Docker Hub. Si une version plus récente est disponible, elle sera téléchargée. Ensuite, le conteneur existant project_web_1 sera supprimé et un nouveau sera créé en utilisant l'image récupérée. Vous devriez voir une sortie indiquant le processus de récupération (si une nouvelle image est disponible), suivi de la suppression et de la création du conteneur.

Vérifions une dernière fois l'état du conteneur.

docker ps -a

Vous verrez toujours le conteneur project_web_1 dans l'état Created. La différence clé ici est que Docker Compose a activement vérifié et potentiellement récupéré une image plus récente avant de créer cette instance de conteneur.

Le flag --pull always est important pour maintenir vos déploiements de services à jour avec les dernières versions d'images, vous garantissant ainsi de bénéficier des dernières fonctionnalités, corrections de bugs et mises à jour de sécurité.

Résumé

Dans ce labo, nous avons appris à utiliser la commande docker compose create pour construire et créer des conteneurs à partir d'un fichier docker-compose.yml. Nous avons commencé par préparer un simple fichier docker-compose.yml définissant un service Nginx, ce qui a nécessité l'installation manuelle de Docker Compose dans l'environnement LabEx en téléchargeant et rendant le binaire exécutable. Nous avons ensuite vérifié l'installation.

Après cette préparation, nous avons exploré différentes options de la commande docker compose create. Nous avons appris à créer des conteneurs avec la commande de base, à forcer la recréation des conteneurs existants avec le flag --force-recreate, à créer des conteneurs sans reconstruire les images avec le flag --no-build, et à s'assurer que les dernières images sont récupérées avant la création avec le flag --pull always. Ces étapes ont démontré la flexibilité et le contrôle offerts par docker compose create dans la gestion des cycles de vie des conteneurs.