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

Effectué

Docker Hub est une excellente source d’images pour commencer à générer vos propres applications conteneurisées. Vous pouvez télécharger une image qui fournit les fonctionnalités de base dont vous avez besoin, puis disposer votre propre application par-dessus pour créer une image personnalisée. Vous pouvez automatiser les étapes de ce processus en écrivant un Dockerfile.

Dans le scénario du magasin de vêtements en ligne, l’entreprise a décidé d’opter pour Docker. L’étape suivante consiste à déterminer la meilleure façon de conteneuriser vos applications web. L’entreprise prévoit de générer plusieurs des applications à l’aide d’ASP.NET Core. Vous avez remarqué que Docker Hub contient une image de base qui inclut cette infrastructure. En guise de preuve de concept, vous souhaitez commencer avec cette image de base et ajouter le code pour l’une des applications web afin de créer une image personnalisée. Vous souhaitez également que ce processus soit aisément reproductible, afin qu’il soit automatiquement effectué à chaque mise en production d’une nouvelle version de l’application web.

Dans cette unité, vous allez apprendre à créer une image Docker personnalisée et à automatiser le processus en écrivant un Dockerfile.

Créer une image personnalisée avec un fichier Dockerfile

Pour créer une image Docker contenant votre application, vous commencez généralement par identifier une image de base à laquelle ajouter des fichiers et des informations de configuration. Le processus d’identification d’une image de base appropriée commence généralement par une recherche d’image sur Docker Hub. Vous souhaitez une image qui contient déjà une infrastructure d'application et tous les utilitaires et outils d’une distribution Linux, tel qu’Ubuntu ou Alpine. Par exemple, si vous avez une application ASP.NET Core que vous souhaitez empaqueter dans un conteneur, Microsoft publie une image appelée mcr.microsoft.com/dotnet/core/aspnet qui contient déjà le runtime ASP.NET Core.

Vous pouvez personnaliser une image en démarrant un conteneur avec l’image de base et en apportant des modifications à celle-ci. Les modifications impliquent généralement des activités telles que la copie de fichiers dans le conteneur à partir du système de fichiers local et l’exécution de divers outils et utilitaires pour compiler le code. Quand vous avez terminé, utilisez la commande docker commit pour enregistrer les modifications dans une nouvelle image.

La réalisation manuelle du processus ci-dessus est gourmande en temps et sujette aux erreurs. Vous pourriez créer un script avec un langage de script comme Bash, mais Docker offre un moyen plus efficace d’automatiser la création d’images par le biais d’un Dockerfile.

Un Dockerfile est un fichier texte brut contenant toutes les commandes nécessaires pour générer une image Les fichiers Dockerfile sont écrits dans un langage de script minimal conçu pour la génération et la configuration des images. Ils documentent les opérations nécessaires pour générer une image à partir d’une image de base.

L’exemple suivant montre un fichier Dockerfile qui génère une application .NET Core 2.2 et l’empaquette dans une nouvelle image.

FROM mcr.microsoft.com/dotnet/core/sdk:2.2
WORKDIR /app
COPY myapp_code .
RUN dotnet build -c Release -o /rel
EXPOSE 80
WORKDIR /rel
ENTRYPOINT ["dotnet", "myapp.dll"]

Dans ce fichier, les opérations suivantes se produisent :

Commande Action
FROM Télécharge l’image spécifiée et crée un conteneur basé sur cette image.
WORKDIR Définit le répertoire de travail actuel dans le conteneur, utilisé par les commandes suivantes.
COPY Copie les fichiers à partir de l’ordinateur hôte dans le conteneur. Le premier argument (myapp_code) est un fichier ou dossier sur l’ordinateur hôte. Le deuxième argument (.) spécifie le nom du fichier ou dossier en tant que destination dans le conteneur. Dans ce cas, la destination est le répertoire de travail actuel (/app).
EXÉCUTER Exécute une commande dans le conteneur. Les arguments de la commande RUN sont des commandes en ligne de commande.
EXPOSE Crée une configuration dans la nouvelle image qui spécifie les ports à ouvrir quand le conteneur s’exécute. Si le conteneur exécute une application web, il est courant d’exposer le port 80.
ENTRYPOINT Spécifie l’opération que le conteneur doit exécuter quand il démarre. Dans cet exemple, il exécute l’application nouvellement générée. Vous spécifiez la commande qu vous voulez exécuter et chacun de ses arguments sous la forme d’un tableau de chaînes.

Par convention, les applications destinées à être empaquetées en tant qu’images Docker ont généralement un fichier Dockerfile situé à la racine de leur code source, et ce fichier se nomme presque toujours Dockerfile.

La commande docker build crée une image en exécutant un fichier Dockerfile. La syntaxe de cette commande présente plusieurs paramètres :

  • L’indicateur -f indique le nom du fichier Dockerfile à utiliser.
  • L’indicateur -t spécifie le nom de l’image à créer, dans cet exemple, myapp:v1.
  • Le dernier paramètre, ., fournit le contexte de build des fichiers sources pour la commande COPY : l’ensemble des fichiers sur l’ordinateur hôte nécessaires pendant le processus de génération.
docker build -t myapp:v1 .

En arrière-plan, la commande docker build crée un conteneur, y exécute des commandes, puis valide les modifications dans une nouvelle image.