Le Post Infeeny

Les articles des consultants et experts Infeeny

Techdays 2015 : Review de la session « Docker, une alternative aux machines virtuelles pour déployer ses services .Net »

Docker : Késako ?

Docker permet d’embarquer une application dans un container virtuel qui pourra s’exécuter sur n’importe quel serveur (Linux et bientôt Windows). C’est une technologie qui a pour but de faciliter les déploiements d’une application, et la gestion du dimensionnement de l’infrastructure sous-jacente. Cette solution est proposée en open source (sous licence Apache 2.0) par une société américaine, également appelée Docker, qui a été lancée par le Français Solomon Hykes.

Voici un slide comparant la même infrastructure utilisant Docker et des VM.

dockerVSVm

Comme vous pouvez le constater cela permet d’éviter de dupliquer les couches (notamment celle de l’OS Hôte !) par rapport à une architecture à VM. Les blocs sont versionnés et ne sont pas dupliqués sur l’hôte :

  • Sur l’architecture à VM on a 3 VM avec 3 blocs (9 blocs)
  • Sur l’archi Docker on a que 5 conteneurs car Lib 1 a été mutualisé entre les « App 1 » et « App 2 ». L’OS Hôte est un OS minimaliste comme CoreOs qui n’embarque que les fonctionnalités essentielles pour accueillir un conteneur, si l’application nécessite un composant (comme un hôte de site web)cela sera compris dans ses conteneurs en dessous de lui.

D’un point de vue d’un développeur C# cela s’apparente un peu à un package Nuget mais au lieu d’être au niveau de la solution c’est au niveau du serveur.

Docker crée le conteneur à partir d’un Dockerfile contenant les instructions pour cette image, en voici un exemple :

dockerfile

  • FROM : Image de départ (un conteneur est créé à partir du conteneur en dessous de lui)
  • ADD : Ajoute ce qu’il y a dans le dossier src vers le dossier /app/
  • WORKDIR : Déplace l’environnement de travail (où sont traités les commades) vers le dossier app
  • RUN : lance la commande kpm restore qui télécharge tous les paquets nécessaires
  • EXPOSE : Indique à Docker que le conteneur va écouter sur ce port
  • ENTRYPOINT : Permet d’indiquer qu’un conteneur est un exécutable. Dans ce cas-ci on va utiliser kestrel (web server linux) pour faire tourner l’app.

Plus d’infos à ce sujet ici : https://docs.docker.com/reference/builder/

 

.Net avec Docker

Pour .Net ce n’est pas actuellement Production Ready, en effet .Net Core est encore en bêta sur Linux et Docker n’est pas dispo sur Windows Server 2012 (mais le sera sur la prochaine version de Windows Server). Une config standard pour tester Docker est d’avoir une machine virtuelle Linux tournant sur un poste Windows (qui fait tourner Visual Studio) :

dockerDevOps

Une configuration plus précise pour la partie Dev :

devWithDocker

Le développeur utilise un share entre sa VM Linux et son Windows. La VM tourne grâce à Hyper-V. On voit ici qu’actuellement faire du .Net avec Docker est un peu compliqué et que de manière général ça manque de tooling (beaucoup de lignes de commandes).

 

Bonne nouvelle : Demain ce sera plus simple on pourra le faire tourner sur un Windows Server, plus d’infos ici.

dockerDevFutur

 

A savoir

  • L’ops peut reconfigurer certains paramètres (ports si la même appli existe sur le même hôte).
  • Docker possède un cache pour ne pas re-télécharger l’image.
  • Pour le moment Docker ne gère rien côté sécurité, il ne fait aucun check pour savoir si l’image obtenue est bien celle demandée mais c’est prévu.
  • Une best practice est de créer un conteneur coquille utilisée par toutes les applications de l’entreprise.

Laisser un 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 )

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 )

Photo Google+

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

Connexion à %s

%d blogueurs aiment cette page :