Exercice : Personnaliser une image Docker pour qu’elle exécute votre propre application web

Effectué

Un fichier Dockerfile contient les étapes de la génération d’une image Docker personnalisée.

Vous décidez de déployer l’une des applications web de votre organisation à l’aide de Docker. Vous sélectionnez une application web simple qui implémente une API web pour un site web de réservations d’hôtel. L’API web expose les opérations HTTP POST et GET qui créent et récupèrent les réservations des clients.

Notes

Dans cette version de l’application web, les réservations ne sont en fait pas conservées et les requêtes retournent des données factices.

Dans cet exercice, vous allez créer un fichier Dockerfile pour une application qui n’en possède pas. Ensuite, vous allez générer l’image et l’exécuter localement.

Créer un fichier Dockerfile pour l’application web

  1. S’il n’est pas déjà en cours d’exécution, démarrez Docker sur votre ordinateur.

  2. Dans une fenêtre d’invite de commandes sur votre ordinateur local, exécutez la commande suivante afin de télécharger le code source de l’application web.

    git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
    
  3. Entrez la commande suivante pour ouvrir le répertoire src.

    cd mslearn-hotel-reservation-system/src
    
  4. Dans le répertoire src, entrez les commandes suivantes pour créer un nouveau fichier appelé Dockerfile et ouvrez-le dans le Bloc-notes :

    copy NUL Dockerfile
    notepad Dockerfile
    

    Notes

    Par défaut, la commande notepad ouvre un fichier texte. Veillez à l’enregistrer en tant que type de fichier Tous les fichiers sans extension de fichier. Pour vérifier, ouvrez le dossier src dans l’Explorateur de fichiers et sélectionnez Affichage > Afficher > Extensions de nom de fichier. Si nécessaire, renommez le fichier et supprimez .txt du nom de fichier.

  5. Ajoutez le code suivant au Dockerfile :

    FROM mcr.microsoft.com/dotnet/core/sdk:2.2
    WORKDIR /src
    COPY ["/HotelReservationSystem/HotelReservationSystem.csproj", "HotelReservationSystem/"]
    COPY ["/HotelReservationSystemTypes/HotelReservationSystemTypes.csproj", "HotelReservationSystemTypes/"]
    RUN dotnet restore "HotelReservationSystem/HotelReservationSystem.csproj"
    

    Ce code a des commandes pour récupérer une image contenant le SDK .NET Core Framework. Les fichiers projet de l’application web (HotelReservationSystem.csproj) et le projet de bibliothèque (HotelReservationSystemTypes.csproj) sont copiés dans le dossier /src du conteneur. La commande dotnet restore télécharge les dépendances requises par ces projets à partir de NuGet.

  6. Ajoutez le code suivant au bas du Dockerfile :

    COPY . .
    WORKDIR "/src/HotelReservationSystem"
    RUN dotnet build "HotelReservationSystem.csproj" -c Release -o /app
    

    Ces commandes copient le code source de l’application web dans le conteneur, puis exécutent la commande dotnet build pour générer l’application. Les DLL qui en résultent sont écrites dans le dossier /app du conteneur.

  7. Ajoutez la commande suivante au bas du Dockerfile.

    RUN dotnet publish "HotelReservationSystem.csproj" -c Release -o /app
    

    La commande dotnet publish copie les fichiers exécutables pour le site web dans un nouveau dossier et supprime tous les fichiers temporaires. Les fichiers de ce dossier peuvent ensuite être déployés sur un site web.

  8. Ajoutez les commandes suivantes au bas du Dockerfile.

    EXPOSE 80
    WORKDIR /app
    ENTRYPOINT ["dotnet", "HotelReservationSystem.dll"]
    

    La première commande ouvre le port 80 dans le conteneur. La deuxième commande accède au dossier /app contenant la version publiée de l’application web. La dernière commande spécifie que quand le conteneur s’exécute il doit exécuter la commande dotnet HotelReservationSystem.dll. Cette bibliothèque contient le code compilé de l’application web.

  9. Enregistrez le fichier et fermez votre éditeur de texte. Veillez à l’enregistrer en tant que type de fichier Tous les fichiers sans extension de fichier.

Générer et déployer l’image à l’aide du fichier Dockerfile

  1. Depuis l’invite de commandes, exécutez la commande suivante afin de générer l’image pour l’exemple d’application à l’aide du fichier Dockerfile. N’oubliez pas le caractère . à la fin de la commande. Cette commande génère l’image et la stocke localement. Le nom reservationsystem est attribué à l’image. Vérifiez que l’image est générée correctement. Un avertissement à propos des autorisations de fichier et de répertoire s’affiche quand le processus est terminé. Vous pouvez ignorer ces avertissements dans le cadre de cet exercice. La génération de l’image peut prendre un certain temps.

    docker build -t reservationsystem .
    
  2. Exécutez la commande suivante pour vérifier que l’image a été créée et stockée dans le registre local :

    docker image list
    

    L’image aura le nom reservationsystem. Vous aurez également une image nommée microsoft/dotnet :

    REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
    reservationsystem   latest              d2501f0f2ced        About a minute ago   1.76GB
    

Tester l’application web

  1. Entrez le code suivant pour exécuter un conteneur utilisant l’image reservationsystem. Docker retourne une longue chaîne de chiffres hexadécimaux. Le conteneur s’exécute en arrière-plan sans aucune interface utilisateur. Le port 80 dans le conteneur est mappé au port 8080 sur la machine hôte. Le conteneur est nommé reservations.

    docker run -p 8080:80 -d --name reservations reservationsystem
    
  2. Démarrez un navigateur web et accédez à http://localhost:8080/api/reservations/1. Vous devriez voir un objet JSON contenant les données pour le numéro de réservation 1, similaire à la sortie suivante :

    Screenshot of the hotel reservations system web app running in a browser.

    Remplacez le « 1 » à la fin de l’URL localhost par un autre numéro de réservation (par exemple, 2 ou 20) pour voir les détails correspondants à la réservation.

  3. Exécutez la commande suivante pour voir l’état du conteneur :

    docker ps -a
    

    La sortie répertorie les éléments suivants pour tous les conteneurs disponibles :

    • ID DE CONTAINER
    • IMAGE
    • COMMANDE
    • Heure de CRÉATION
    • STATUT
    • PORTS
    • NAMES

    Vérifiez que le STATUS du conteneur est Up.

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
    07b0d1de4db7        reservationsystem   "dotnet HotelReserva…"   5 minutes ago       Up 5 minutes        0.0.0.0:8080->80/tcp   reservations
    
  4. Entrez la commande suivante pour arrêter le conteneur reservations :

    docker container stop reservations
    
  5. Supprimez le conteneur reservations du registre local.

    docker rm reservations
    
  6. Laissez reservationsystem dans le registre local. Vous utiliserez cette image dans l’exercice suivant.

Félicitations ! Vous avez créé une image pour votre application web et vous l’avez exécutée avec un conteneur Docker.