Dockerisation API .Net Core 5.0.1

A travers cet article, vous verrez comment créer une image Docker et la faire tourner sur votre machine.

Prérequis :

  • Visual Studio 2019
  • Installer la version .Net Core 5.0.1: disponible sur cette page ou en téléchargement direct ici
  • Et pour finir Docker

On va donc commencer par créér l’API en elle même. Je commence toujours la création de mes nouveaux projets par une Solution Vide. Cela me permet de donner un nom générique à la solution avant de rajouter les projets.

Une fois la solution créé, on va ajouter un projet de de type ASP.NET Core Web Application. Pour cela, faites un clic droit sur le nom de votre solution puis ajouter => ajouter un nouveau projet.

Dans la prochaine étape, vérifier bien que la version .Net Core 5.0 est bien disponible. Vous remarquerez que que l’on ne voit pas 5.0.1. Microsoft arrête l’affichage de la version au chiffre mineur. Mais comme nous avons installer la version 5.0.1 (correctif) ce sera bien celle-ci qui sera utiliser car la plus récente à ce jour. Nous choissirons le template de projet ASP.NET Core Web API. Ensuite activer le support de Docker et j’ai choissis de le faire tourner sur une image Linux

Maintenant si vous démarrez votre projet, un browser se lancera sur la page Swagger de votre API. Ceci est une nouveauté avec .Net Core 5. Si vous laissez « Enable OpenApi support » coché, le projet sera créé directement avec Swagger. Et voila, votre projet en mode DEBUG fonctionne. J’insiste sur en mode DEBUG car effectivement dans ce mode Visual Studio n’utilise pas l’entiereté du fichier Dockerfile. Or ce fichier est la base pour réaliser une image docker. Pour réaliser une image docker nous allons donc la créer manuellement avec le Docker CLI afin de s’assurer que tout fonctionne correctement. Pour ce faire, ouvrez un command line (Astuce ici) dans le répertoire ou se trouve le fichier Dockerfile. Nous utiliserons la command build

docker build . -t sampleaks

Le . est pour signaler que le ficher Dockerfile (path) est dans le répertoire courant. -t est pour définir un tag (optionel) mais cela nous facilitera les prochaines étapes. ATTENTION : à ce niveau-ci, vous aurez une erreur. Afin de comprendre ce qui se passe lorsque vous êtes en mode DEBUG Visual studio n’utilise pas entièrement votre fichier Dockerfile. Ceci est expliqué en détail ici. Vous pouvez remarquer dans le fichier que nous avons des « Stage« . Cela est représenté par FROM … AS. En debug seul le « Stage » base est utilisé. Du coup, nous allons corriger quelques erreurs qui se trouvent dans le template de base généré automatiquement.

La version : dans la définition du premier stage, il manque la version du correctif. 5.0.1. en debug cela fonctionnera car c’est le MSbuild local qui est utiliser pour créer le package. Cela ne vous empechera pas de créer l’image (build), vous pourrez même la démarrer mais votre API ne fonctionnera tout simplement pas.

Le répertoire : « COPY [« Sample.Aks.Api/Sample.Aks.Api.csproj », « Sample.Aks.Api/ »] » dans cette commande copy, on va rechercher le csproj dans un sous répertoire or le csproj se trouve ici au même niveau que le Dockerfile.

COPY . . : Cette commande est effectuée avant que l’on soit sur le bon niveau grâce à la commande WORKDIR

Vous pouvez retrouver l’ensemble des modifications ici.

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:5.0.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["Sample.Aks.Api.csproj", "Sample.Aks.Api/"]
RUN dotnet restore "Sample.Aks.Api/Sample.Aks.Api.csproj"
WORKDIR "/src/Sample.Aks.Api"
COPY . .

RUN dotnet build "Sample.Aks.Api.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Sample.Aks.Api.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Sample.Aks.Api.dll"]

Vous pouvez maintenant refaire le build.

On peut voir que tout s’est correctement déroulé. Maintenant via l’interface de docker, vous pouvez constater que votre image (d’une taille de 210 MO) est bien créé ou également par la commande suivante :

docker image list

Maintenant gràce à la commande Run, nous allons créer et démarrer notre conteneur.

docker run -d -p 9090:80 --name sampleaks sampleaks

Il est également posible de voir les conteneurs via la commande :

docker ps

Vous pouvez maintenant ouvrir votre browser a l’URL suivante : http://localhost:9090/weatherforecast

En conslusion vous aurez une solution correcte avec le fichier Dockerfile qui est le point le plus important ici afin de créer une image réellement utilisable dans un conteneur docker. Celui-ci est par exemple utilisable dans un pipeline afin de pousser l’image sur Azure container registry ;).

Vous pouvez retrouver le code complet ici.

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.