Docker et .NET Core

Si vous avez déjà entendu parler de docker sans savoir ce que c’était exactement : cet article va vous permettre de faire en sorte que vos doutes se dissipent… Je pendrais l’exemple d’une application .NET Core pour illustrer cela.

Docker, qu’est ce que c’est?

Docker est une plateforme logicielle permettant de regrouper des logiciels dans des conteneurs.

Pour comprendre plus simplement, il suffit de comparer Docker à un porte-conteneurs.

blog ai3 280px-Container_ships_President_Truman_%28IMO_8616283%29_and_President_Kennedy_%28IMO_8616295%29_at_San_Francisco Docker et .NET Core

Dans l’image ci-dessus, vous pouvez vous apercevoir que ce porte conteneurs contient un nombre important de conteneurs avec à l’intérieur de la marchandise. D’un point de vue logiciel, cela fonctionne de la même façon: Docker va héberger des conteneurs logiciels avec à l’intérieur ce que vous souhaitez.

Si une VM est en mesure d’émuler une infrastructure matériel, un conteneur lui sera en mesure d’émuler un système d’exploitation.

Les conteneur et les images

  • Une Image va être composé d’un système de fichier contenant l’OS, l’application, la base de données etc.. bref tout ce que vous souhaitez intégrer dans votre conteneur.
  • On l’a vu au dessus : un conteneur est un réceptacle. Celui-ci va être alimenté par l’image crée préalablement par vos soins.

Tout image Docker que l’on voudra crée où utilisé (en récupérant par exemple l’image d’un repository) sera obligatoirement mis dans un conteneur.

Docker, .NET Core et VS Code

Pour vous montrer l’utilisation de Docker, je vais prendre le cas d’une application .NET Core MVC en utilisation Visual Studio Code.

  • Création du projet .NET Core

Depuis une invite de commande, lancer les commandes suivantes

mkdir dockerapp
cd dockerapp
dotnet new mvc -o DockerApp

blog ai3 image-3-1024x487 Docker et .NET Core
  • Publication de notre application

Dans la même invite de commande, lancer la commande suivante

dotnet publish -o ./publish

blog ai3 image-10-1024x229 Docker et .NET Core

Cette commande permet de compiler l’application sous forme d’exécutable optimisé. Tout cela se trouve dans le répertoire publish.

cd publish

  • Exécution de l’application

Dans la même invite de commande, lancer la commande suivante

dotnet DockerApp.dll

blog ai3 image-11-1024x264 Docker et .NET Core
blog ai3 image-6-1024x406 Docker et .NET Core
  • Maintenant, on va dockeriser cette application 🙂

On va ouvrir le code source de cette application avec Visual Studio Code

blog ai3 image-12-1024x213 Docker et .NET Core

Nous allons ensuite créer un dockerfile : c’est un fichier sans extension avec le nom dockerfile où sont décrit les opérations étapes par étapes de création de conteneur.

blog ai3 image-7 Docker et .NET Core
  • On va remplir ce fichier dockerfile en ajoutant les lignes ci-dessous dans ce fichier.

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base

WORKDIR /app

COPY /publish .

ENTRYPOINT [« dotnet », « DockerApp.dll »]

  1. Première ligne : va récupérer l’image d’ASP.NET Core 2.1 depuis un repository pour l’inclure dans notre conteneur.
  2. Deuxième ligne : va récupérer le répertoire de travail de notre appli pour l’inclure dans notre conteneur.
  3. Troisième ligne : va copier tout le contenu du répertoire publish
  4. Quatrième ligne : cette dernière ligne est le point d’entrée. Cela indique à Docker que l’on doit exécuter la dotnet command avec DockerApp.dll en paramètre.
  • On va construire l’image myimage qui se trouvera à l’intérieur du conteneur.

Depuis le terminal VS Code, lancer la commande suivante

blog ai3 image-13-1024x478 Docker et .NET Core
blog ai3 image-14-1024x668 Docker et .NET Core
  • On va indiquer à Docker d’exécuter l’image myimage dans un conteneur.

Dans la console vsCode, lancer la commande suivante

blog ai3 image-15-1024x28 Docker et .NET Core
  • Vous pouvez vous apercevoir que l’application s’est lancée normalement. Seule grosse différence : elle est maintenant encapsulée dans un conteneur.
blog ai3 image-16-1024x419 Docker et .NET Core

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.