Déployer un container Docker contenant ASP.NET 5 sur Microsoft Azure

On entend beaucoup parler de Docker ces derniers temps. En effet, cette nouvelle technologie qui permet de créer des « micro-services » que l’on peut déployer sur différentes plateformes, est très à la mode.

Microsoft, quant à lui, a fait de sa plateforme Microsoft Azure une plateforme très ouverte à l’open source. Il est d’ailleurs désormais possible de faire tourner des applications ASP.NET 5, jusque-là réservées aux plateformes Windows, sur Linux et OSX.

Voyons comment toutes ces technologies s’utilisent ensemble, en déployant notre premier container Docker contenant une application ASP.NET 5 hébergée dans une VM Ubuntu dans Microsoft Azure.

Prérequis

Ce tutoriel a été réalisé sous Windows (mais est également réalisable sur Mac ou Linux).

Un compte Microsoft Azure est nécessaire pour déployer une machine virtuelle sur la plateforme. Si vous n’en disposez pas encore, vous pouvez vous inscrire gratuitement sur la plateforme pour une période d’essai à cette adresse.

Installation des outils d’administration Microsoft Azure

Nous allons utiliser les outils en ligne de commande qui sont basé sur Node.JS pour effectuer le provisionnement de notre machine virtuelle sur Azure. Le principal avantage de cet outil par rapport à Powershell est qu’il est disponible sur les trois systèmes d’exploitation : Windows, Mac et Linux. Ainsi, si vous n’êtes pas fidèle à un seul système d’exploitation, vous ne serez jamais dépaysé puisque les commandes seront toujours les mêmes.

Télécharger les outils en ligne de commande.

Outil de ligne de commande Azure web_platform_installer

Pour ma part, je suis sous Windows, l’installation est effectuée grâce à Web Platform Installer.

Web Platform Installer Azure

Il suffit alors de cliquer sur « Installer » pour que l’outil s’installe sans intervention manuelle. Pour vérifier que l’outil est bien installé, il suffit de lancer une invite de commande et de lancer la commande :

azure

Si l’outil est correctement installé, vous devez obtenir un  résultat identique à celui-ci :

Installation outils d'administration Microsoft Azure

 

Connexion à Microsoft Azure

Nous allons maintenant relier notre compte Azure à notre outil. Pour cela, nous allons télécharger le fichier de publication contenant l’ensemble des informations concernant notre abonnement, puis l’importer. Il faut lancer la commande suivante :

azure account download

L’utilitaire va ainsi ouvrir un navigateur internet, nous demander de nous identifier et nous rediriger vers l’URL : https://manage.windowsazure.com/publishsettings/index?client=xplat

Un fichier à télécharger va être soumis au téléchargement. Je vous conseille de bien noter où vous l’enregistrez. Pour ma part, je l’ai enregistré à la racine de mon disque D: sous le nom « azure.publishsettings ».

Ensuite, nous allons importer le fichier de publication précédemment enregistré en lançant la commande :

azure account import D:\azure.publishsettings
Importation de fichiers de publication dans MS Azure

Une fois l’import effectué, vous pouvez vérifier que tout s’est correctement déroulé en lançant la commande suivante, qui va lister l’ensemble de vos abonnements Azure :

azure account list

Vérifier l'import

Si votre abonnement Azure est bien listé, vous êtes prêt à déployer votre machine virtuelle Ubuntu.

Déploiement de notre hôte Docker

Un container Docker nécessite d’être déployé sur un hôte disposant du serveur Docker. Dans ce tutorial, nous allons utiliser une distribution Ubuntu car l’image est déjà présente dans la galerie Azure. Nous y installerons ensuite Docker et notre application.

Microsoft Azure propose une galerie d’images de différents systèmes d’exploitation (Windows, Ubuntu, CoreOS, Suse…) ainsi que plusieurs versions. Nous allons tout d’abord choisir une image de Ubuntu.

Pour lister l’ensemble des images disponibles, il faut utiliser la commande suivante :

azure vm image list

Une longue liste apparaît alors et il est difficile de faire son choix. Pour limiter la sélection aux machines Ubuntu, on peut alors utiliser la commande « grep » sur Linux ou « findstr » sur Windows.

azure vm image list | findstr Ubuntu-15_04

J’ai ainsi choisi la dernière image Ubuntu disponible à la date de cet article : « b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-15_04-amd64-server-20150422-en-us-30GB »

La commande azure vm create va nous permettre de créer rapidement une machine virtuelle sur laquelle nous pourrons nous connecter par la suite et y installer docker ainsi que notre application.

Ainsi, en utilisant l’image que nous avons sélectionnée, il suffit de lancer la commande suivante :

azure vm create --ssh 22 --location “West Europe” < vm-CloudServiceName> "b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-15_04-amd64-server-20150422-en-us-30GB" <username> <password>

où :

  • --ssh 22 : permet d’ouvrir par défaut le port 22 qui va nous permettre d’administrer notre machine avec SSH ;
  • --location “West Europe” : datacenter Azure où la VM sera déployée ;
  • <vm-CloudServiceName> : DNS du Cloud Service de votre choix ;
  • <username> : login de l’utilisateur root créé par défaut sur la VM ;
  • <password> : mot de passe de l’utilisateur (au moins 8 caractères avec une minuscule, une majuscule et un caractère spécial comme !@#$%^&+=);

Dans mon cas, j’ai lancé la commande suivante :

azure vm create --ssh 22 --location “West Europe” ubuntudocker-mcklmt "b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-15_04-amd64-server-20150422-en-us-30GB" mcklmt Ubuntu!2015

Azure va tout d’abord créer un compte de stockage puis y déposer une copie de notre image Ubuntu. Enfin, une machine virtuelle basée sur cette image de disque va être instanciée.

Si tout se passe correctement, vous devez obtenir un résultat similaire à celui-ci :

Instancier une VM sur Azure

La commande suivante va vous permettre de vérifier que votre VM a bien été créé :

azure vm list

Vérifier que la VM est bien créé

Connexion à la machine virtuelle en SSH

Nous allons nous connecter à la machine virtuelle en utilisant SSH. Si vous êtes sous Windows, vous pouvez utiliser Putty. En lançant Putty, saisissez l’adresse de votre Cloud Service que vous venez de créer :

Utiliser Putty pour se connecter à la VM

En cliquant sur « Open », Putty peut vous demander une confirmation de connexion telle que celle-ci :

Se connecter avec Putty

Cliquez sur « Yes » pour accepter la connexion. Utilisez ensuite le couple login / mot de passe que vous avez choisi précédemment. Vous voilà connecté !

Connexion réussie à la VM avec Putty

Installation de Docker

La commande est assez simple et se résume à :

sudo apt-get install docker.io

Si une confirmation vous est demandée, cliquez simplement sur “Y ». Lorsque la commande est terminée, vous devez obtenir un message similaire à celui-ci :

Installation de Docker

 

Création de notre container Docker

Pour créer un container Docker, il est possible de créer un container à partir de rien, ou bien de partir d’une image de base sur laquelle nous allons ajouter notre application. C’est cette seconde possibilité que j’ai retenue. J’ai donc choisi de déployer une application ASP.NET 5.

Pour récupérer cette application, j’ai choisi de télécharger directement les sources à partir du dépôt officiel du projet sur GitHub.  La commande suivante va permettre de cloner le dépôt officiel dans le répertoire aspnet-Home sur notre machine virtuelle :

git clone https://github.com/aspnet/Home.git aspnet-Home

Cloner le dépôt officiel

Rendons-nous dans le répertoire de l’application pour lister les fichiers :

cd aspnet-Home/samples/latest/HelloWeb
dir

Ces commandes doivent vous permettre d’observer le contenu du répertoire suivant :

Observer le contenu du répertoire

La création d’un container Docker est régie par la présence d’un fichier « Dockerfile » qui permet de préciser le contenu du container. Créons simplement ce fichier en lançant la commande :

nano Dockerfile

Cette commande va permettre de lancer la création du fichier « Dockerfile » et de lancer l’éditeur de texte « nano ».

Ensuite, saisissez le contenu du fichier « Dockerfile » :

FROM microsoft/aspnet:1.0.0-beta4

COPY . /app
WORKDIR /app
RUN ["dnu", "restore"]

EXPOSE 5004
ENTRYPOINT ["dnx", ".", "kestrel"]

Enfin, validez par les commandes « CTRL + X »,  la touche « Y » pour enregistrer les modifications et enfin la touche « Entrée » pour valider le nom du fichier.

Explorer contenu du fichier Dockerfile

Explorons le contenu de ce fichier Dockerfile, ligne par ligne :

FROM microsoft/aspnet:1.0.0-beta4 : permet de préciser à Docker quelle image est la base de notre container. J’ai volontairement sélectionné une version plutôt que de prendre la dernière car le développement ASP.NET n’est pas encore stabilisé.

COPY . /app et WORKDIR /app : Docker va copier le contenu de notre application dans le container et changer le répertoire de travail.

RUN ["knu", "restore"] : Docker va lancer la restauration des dépendances qui sont présentes dans l’application.

EXPOSE 5004 : Docker va ouvrir le port 5004 afin que l’application puisse écouter les requêtes entrantes.

Enfin, la dernière commande ENTRYPOINT ["dnx", ".", "kestrel"] va permettre au serveur ASP.NET de se lancer dans le répertoire de notre application.

Il nous faut maintenant construire notre container. Rien de plus simple, il nous suffit de lancer la commande :

sudo docker build -t mcklmt-app .

mcklmt-app est le nom de mon container.

Si vous obtenez un message similaire à celui-ci :

Message d'arrêt du service Dociker

C’est simplement que le service docker est arrêté sur votre machine. Dans ce cas, il vous suffit de démarrer le service en lançant la commande : sudo service docker start et de relancer la construction de votre container.

Docker va télécharger l’image de base que nous avons choisie, ici, l’image de Microsoft ASP.NET va restaurer les dépendances de notre application et construire le container. Lorsque Docker a terminé son travail, vous devez apercevoir un message similaire à celui-ci :

Téléchargement d'une image dans Docker

La commande sudo docker images va permettre de vérifier que notre image est bien construite :

Commande sudo docker images

Lançons maintenant notre container :

sudo docker run –t –p 80 :5004 mcklmt-app

Lancement du container

La commande sudo docker ps nous permet de vérifier que tout s’est correctement déroulé et que tout fonctionne correctement.

Commande sudo docker ps

 

 Exposer notre application sur internet

Nous avons presque terminé. Notre application est déployée dans notre container Docker. Il faut maintenant ouvrir le port 80 sur lequel notre machine virtuelle attend les requêtes sur le firewall Azure. Pour cela, revenons sur notre poste de travail où nous allons utiliser les outils en ligne de commande Azure pour créer un point de terminaison sur notre machine virtuelle.

Pour cela, lançons la commande :

azure vm endpoint create ubuntudocker-mcklmt 80 80

ubuntudocker-mcklmt est le nom de la machine virtuelle.

Commande mv endpoint create

 

Test depuis le navigateur

Vous pouvez désormais ouvrir votre navigateur à l’adresse de votre Cloud Service et vous devez apercevoir ceci :

Cloud ASP.NET 5

Conclusion

Dans ce tutoriel, vous avez appris à manipuler les outils en ligne de commande Microsoft Azure pour administrer et automatiser votre infrastructure dans le Cloud. Si vous souhaitez déployer votre container sur une autre plateforme Cloud comme Amazon ou Google, c’est tout à fait possible en minimisant les actions de déploiement. Il vous suffit de ne redéployer que le container, ce qui est moins lourd que de déplacer une machine virtuelle.

Et pourquoi ne pas aller plus loin et déployer votre container sur un cluster Docker Swarm ?

Mickael Mottet

Microsoft Azure MVP – SQLI Rouen

0 commentaires

votre commentaire

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Laisser un commentaire

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

Inscription newsletter

Ne manquez plus nos derniers articles !