Install Docker on Windows Server 2016 and bypass SHA256 hash validation error

Installing Windows Container is quite straightforward … except when you have an error message on certain VM (not on every VM) like “Cannot verify the file SHA256. Deleting the file”. After a deep crawl of the web to find a correct way to solve this issue, I found a tons of Github issue answers and blog post that works sometimes but mostly are inaccurate and the package version mentioned is outdated. So I introduce you a method that will keep the process right on board version after version.

The quick start page from Microsoft to install Docker on Windows Server 2016 is here, and it’s well written (although not very useful when having installation error) : https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/quick-start-windows-server

Get the right version and Docker install file

To download the correct version of the package, you’ll have to get the manifest and to look for your version to get the right URL :

  1. Download the manifest file containing every package version : Start-BitsTransfer -Source https://dockermsft.blob.core.windows.net/dockercontainer/DockerMsftIndex.json
  2. In the manifest, copy the right URL to the install ZIP file (in my case I need 17.06.0-ce) :

image

Installation

Once you know what you need (in my case version 17-06-0-ce), follow these steps to make it work :

  • Go to the temp folder where everything happen (don’t forget to replace by your current username) : cd C:\Users\<username>\AppData\Local\Temp\DockerMsftProvider\
  • Download Docker package (don’t forget to replace the URL by the one you copy previously) : Start-BitsTransfer -Source https://dockermsft.blob.core.windows.net/dockercontainer/docker-17-06-0-ce.zip -Destination /docker.zip
  • Rename the file to keep a backup (during the process the file is deleted, you won’t have to download it again) : cp .\docker-17-06-0-ce.zip docker-backup.zip
  • Install Docker package : Install-Package -Name docker -ProviderName DockerMsftProvider -Verbose -RequiredVersion 17.06.0-ce
  • Tada ! Things should be OK, so the final step is to restart the VM to make everything work like a charm : Restart-Computer -Force

Le premier Afterworks MS à Koné

La première édition des Afterworks MS en Province Nord se sont déroulés à Koné ce Lundi 07/08. Devant l'engouement des personnes présentes pour ce type d’événement, les Afterworks sur Koné devraient être réitérer avec un contenu plus spécifique (et moins dense) dans une prochaine édition.

Un grand merci à la CCI de Koné pour le prêt de la salle (et pour nous avoir attendu en fin de journée) et pour accompagner ces initiatives communautaires depuis maintenant plus d’un an.

Comme convenu, nous avons pu partager notre expérience et expertise des technologies Office 365, SharePoint 2016, Visual Studio & .NET, Docker et Windows Container.
Si vous avez des questions sur ces technologies, si vous souhaitez savoir comment nous les déployons chez nos clients ou dans nos sociétés, n'hésitez pas à nous contacter.

Speakers : Sylver Schorgen (SF2i) et Julien Chable (NC IT - MVP Office Server et Development)

Les slides des sessions sont disponibles ci-dessous :
• Office 365 : https://fr.slideshare.net/secret/16KvWXBVppVgUG
• Nano Server : https://fr.slideshare.net/…/prsentation-nano-server-ms-afte…
• SharePoint 2016 : https://fr.slideshare.net/…/prsentation-sharepoint-2016-786…
• Visual Studio et .NET Core : https://www.slideshare.net/…/visual-studio-2017-launch-keyn…
• Docker :
- https://www.slideshare.net/…/introduction-devops-containari…
- https://www.slideshare.net/…/lcosystme-docker-pour-les-dev-…

Image may contain: one or more people, people sitting, table, living room and indoor

Maven Docker build failed with ‘org.apache.http.conn.HttpHostConnectException: Connect to localhost:2375’ on Windows

You can have this kind of error when building a project with Maven and the Docker plugin (by Spotify) :

[INFO] Building image kelios-solutions/annuaire
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:16 min
[INFO] Finished at: 2017-06-29T16:59:30+11:00
[INFO] Final Memory: 32M/78M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.spotify:docker-maven-plugin:1.0.0:build (default-cli) on project annuaire: Exception caught: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.
rs.ProcessingException: org.apache.http.conn.HttpHostConnectException: Connect to localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect -> [Help 1]

[ERROR]

On Windows, with Docker for Windows, just check if you have exposed the daemon on port 2375 (in Docker for Windows settings) :

image

And your Maven build should create the Docker image.

Fail to pull Windows Core/Nano Server container images with Docker for Windows ‘unknown blob’

During my last session preparation, I switched Docker for Windows to use Windows containers, to be honest I don’t have use it for some times (my nested virtualized Windows Server 2016 do the job) and I had the following error when downloading the microsoft/nanoserver image : unknow blob

image

The issue may be that your Docker for Windows daemon is not completely switch to Windows container. So execute the following line to switch it : & ‘C:\Program Files\Docker\Docker\DockerCli.exe’ –SwitchDaemon

Then pull your image again and things should work :

image

Fail to run a new ASP.NET Core solution with Docker in Visual Studio 2017

Sometimes you want to make a demo to a good friend of you about Docker support in Visual Studio 2017. So your start Visual Studio 2017, create a blank ASP.NET Core (Docker support enabled), press F5 to run the application but things are not really happening like your want. In my case, I had the following message :

The specified framework 'Microsoft.NETCore.App', version '1.1.2' was not found.
  - Check application dependencies and target a framework version installed at:
      /usr/share/dotnet/shared/Microsoft.NETCore.App
  - The following versions are installed:
      1.1.1
  - Alternatively, install the framework version '1.1.2'.

The issue comes from the fact that Visual Studio 2017 builds a project based on .NET Core 1.1.2 but your Docker image only supports .NET Core 1.1.1 '(see message). Why your image doesn’t support 1.1.2 ? Maybe simply because your image is outdated with no support for 1.1.2. So the trick is quite easy and it consists to execute the pull again the image to force Docker to update the base image :

docker pull microsoft/aspnetcore:1.1

This should solve your issue after several minutes of downloading the updated image layer.

Docker ASP.NET MVC image creation issue ‘GetFileAttributesEx : The system cannot find the path specified’

When using Visual Studio 2017 and trying to create a Docker image for your ASP.NET web app from the standard microsoft\aspnet image (or another image), you may have the following error message : GetFileAttributesEx bin\Release\PublishOutput : The system cannot find the path specified

image

This error is caused by the .dockerignore file generated by Visual Studio 2017 (more information on .dockerignore file : https://docs.docker.com/engine/reference/builder/#dockerignore-file).

How to solve the issue

  1. Open and edit the .dockerignore file located at the root of your Visual Studio project
  2. Remove the first line with the ‘*’ (this is the guilty line !)
  3. Save the modified .dockerignore file
  4. Re execute your docker build command (ex : docker build –t <your tag> .)

Original Visual Studio 2017 .dockerignore file :

image

The corrected .dockerignore file :

image

Check your web app to know if everything works fine

  1. First, you won’t be able to use the URL http://localhost, you need the IP address of the container. To find it, execute this command in Powershell :
  2. docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" ncit_liasse

  3. Open your favorite browser and enter the URL http//<your ip address> to show you web app shining

image

More documentation on the use of this image at https://hub.docker.com/r/microsoft/aspnet/

Useful documentation on how to migrate an ASP.NET MVC application to Docker : https://docs.microsoft.com/en-us/aspnet/mvc/overview/deployment/docker-aspnetmvc

Now enjoy migrating your ASP.NET MVC web apps to Docker containers !

Lancement de Visual Studio 2017 aux Afterworks@Noumea du 15 Mars

Pour le lancement de Visual Studio 2017 et les 20 ans de l’outil de prédilection de tous les développeurs .NET, il aura bien fallut un évènement spécial des Afterworks@Noumea des communautés MS.

Après une présentation d’un peu plus d’une heure ponctuée de démos sur l’outil et sur les différentes fonctionnalités, .NET Core, l’architecture en microservice avec Docker et la mobilité, nous avons pu enfin goûter au gâteau d’anniversaire :

P1040523

Retrouvez les slides de la session ici : https://fr.slideshare.net/neodante/visual-studio-2017-launch-keynote-afterworksnoumea

Au niveau des ressources sur .NET, n’hésitez pas à me suivre sur LinkedIn (https://www.linkedin.com/in/jchable)

Encore un grand merci à la CCI de Nouméa pour le prêt des locaux et leur temps.

Bonne journée

Lancement de Visual Studio 2017 à Nouméa

MSFT_16257_VS17_1000x750_Sharethrough_thumb[4]Suite au lancement officiel du 07 Mars, nous organisons un évènement local ce mercredi 15/03 à la CCI de Nouméa. Au programme, une introduction aux nouvelles fonctionnalités de Visual Studio 2017 et à la plateforme .NET. Pendant cette présentation d’un peu plus d’une heure, ponctuées de pas mal de démonstrations, nous partagerons avec les participants sur les sujets suivants :

- Les nouveautés de Visual Studio 2017

- Quoi de neuf dans .NET et .NET Core ?

- Le développement mobile multiplateforme avec Xamarin

- Microservice, Docker et DevOps

Soyez préparer à manger un morceau du gâteau des 20 ans de Visual Studio !

Nous avons également quelques goodies à faire gagner pendant la session !

A demain soir !

MSFT_16257_VS17_STD_SpecialDelivery_FB_final3_DN-MININT-07V2IBM_thumb[3]

Déployer un site ASP.NET Core dans un conteneur Nano Server

Avec l’arrivée de Windows Server 2016, les entreprises se voit maintenant dotées d’un nouveau type de conteneur : les conteneurs Windows (exécutant Windows Server Core et Nano Server). A l’instar des conteneurs Linux, les conteneurs Windows possèdent leurs propres images disponible sur le Docker Hub. L’agnosticité de Docker (peu importe le fournisseur ou la technologie sous-jacente) et les capacités multiplateforme de .NET Core vont nous permettre de migrer une application ASP.NET Core existante s’exécutant dans conteneur Linux (cf dernier post) vers Nano Server sous Windows Server 2016.

Migrer vers un conteneur Windows

Lors du dernier post sur le sujet, nous avions vu comment déployer une application ASP.NET MVC Core dans un conteneur Linux. Voici le Dockerfile (que j’ai nommé Dockerfile.nanoserver permettant d’avoir un Dockerfile par type de conteneur) permettant de déployer la même application dans un conteneur Windows :

FROM microsoft/dotnet:nanoserver
 
COPY . /app
WORKDIR /app
RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]
 
EXPOSE 5000/tcp
ENTRYPOINT ["dotnet", "run", "--server.urls", http://*:5000]

Constat : la seule différence à ce fichier Dockerfile est l’image de base (microsoft/dotnet:nanoserver) qui spécifie que nous souhaitons utiliser l’image .NET Core sous Nano Server. C’est aussi simple que ça ! (pour une application .NET Core en tout cas).

En quelques étapes :

  • Exécuter la même commande de Build pour construire votre image : docker build –t <votre tag> –f Dockerfile.nanoserver .

image

  • Démarrer un conteneur avec la commande : docker run –d –p 5000:5000 <votre tag>
  • Ouvrez un navigateur web et naviguez vers votre conteneur : http://<ip de votre conteneur/serveur Windows Server 2016>:5000

Exécuter l’application dans un conteneur Hyper-V

Le conteneur Windows Hyper-V apporte une couche d’isolation et de sécurité supplémentaire à l’application. Le choix entre un conteneur Windows “simple” et un conteneur virtualisé Hyper-V se fera en fonction de vos besoins, ce dernier fournissant une isolation du kernel et une séparation entre le niveau/version des patchs de l’hôte et de l’application.

La ligne de commande est similaire, nous précisons simplement le niveau d’isolement :

  • Démarrer un conteneur avec la commande incluant le paramètres isolation : docker run –d –p 5000:5000 –isolation=hyperv <votre tag>
  • Ouvrez un navigateur web et naviguez vers votre conteneur : http://<ip de votre conteneur/serveur Windows Server 2016>:5000

Container everywhere !

L’introduction des conteneurs Windows avec l’arrivée de Windows Server 2016 annonce une adoption du conteneur encore plus importe que celle actuellement avec les conteneurs Linux : containarization d’applications anciennes ou déploiement d’applications IIS avec le .NET Framework (avec Windows Server Core), déploiement Apps/IIS/AD DS/Hyper-V/etc (avec Nano Server), etc. L’adage Docker “Build, Ship and Run any app, Everywhere” n’a jamais eu autant de sens !

Déployer un projet web ASP.NET Core 1.0 avec Docker sur Windows en 15 minutes

Venant tout juste de passer sous Windows 10 update November 2015 (prérequis pour Docker beta) et souhaitant tester la RC2 fraichement débarquée de .NET Core, je me suis dit qu’un petit post ne serait pas de trop pour prendre les (nouvelles) bonnes habitudes. Aussi voici comment faire court pour créer une application .NET Core :

Installation des prérequis

Pour créer un projet ASP.NET Core :

  • .NET Core SDK (en RC 2 lors de la rédaction de ce post) : https://go.microsoft.com/fwlink/?LinkID=798398
  • NodeJS et son gestionnaire de package NPM : https://nodejs.org
  • Docker pour Windows (si vous êtes sur Windows) ou Docker pour Mac (si vous êtes sur Mac) : https://beta.docker.com/ (l’utilisation de la Beta nécessite l’obtention d’une clef qui arrive au compte goutte en ce moment …). Vous devez également avoir une version de Windows 10 adéquate (avec Hyper-V installé … pourquoi ne l’auriez-vous pas installé d’ailleurs ?!?) et la mise à jour de Novembre 2015.

Création du projet ASP.NET Core

  1. Dans une invite de commande ou dans une console PowerShell :
    1. mkdir coreapp : création d’un répertoire racine pour le projet
    2. cd .\coreapp\
  2. Installation du générateur Yeoman ASP.NET pour créer une application ASP.NET Core (et non juste une application console avec la commande dotnet new)
    1. npm install –g yo : installation de Yeoman
    2. npm install –g generator-aspnet : installation du générateur ASP.NET Core de Yeoman
  3. Création du projet :
    1. yo aspnet : affiche un wizard pour créer un nouveau projet :
      image
  4. Dans le wizard :
    1. Sélectionnez Web Application > Boostrap
    2. Saisissez le nom de l’application
  5. Le générateur va se mettre au travail et récupérer pour vous toutes les dépendances du projet et les placer dans un répertoire du même nom que celui de votre projet.
  6. Nous avons un peu de modification à faire pour rendre notre application compatible avec Docker (et rendre accessible notre application  à l’extérieur du container).
    Ouvrez le fichier Program.cs dans votre éditeur préféré (Visual Studio Code ?)
    Modifiez le contenu pour avoir un contenu similaire à ce qui suit puis enregistrez vos modifications :

    using Microsoft.Extensions.Configuration;
    
    ...
    namespace AppCoreDocker
    {
     public class Program
     {
     public static void Main(string[] args)
     {
     var config = new ConfigurationBuilder()
     .AddEnvironmentVariables("")
     .Build();
     var url = config["ASPNETCORE_URLS"] ?? "http://*:5000";
     var env = config["ASPNETCORE_ENVIRONMENT"] ?? "Development";
     
     var host = new WebHostBuilder()
     .UseKestrel()
     .UseUrls(url)
     .UseEnvironment(env)
     .UseContentRoot(Directory.GetCurrentDirectory())
     .UseIISIntegration()
     .UseStartup&amp;lt;Startup&amp;gt;()
     .Build();
    
     host.Run();
     }
     }
    }
    

    Cette modification permet de spécifier à Kestrel d’écouter sur le port 5000 quel que soit l’adresse que nous lui fournissons (merci à Laurent qui m’a évité de perdre du temps). Vous remarquerez la nouveauté liée à la RC 2 de cette configuration.

  7. Une fois le projet générer, les étapes sont les mêmes que pour tout projet :
    1. cd <nom de votre projet>
    2. dotnet restore : restaure les packages Nuget de l’application
    3. dotnet build : compile le projet (se produira si vous faites un run également)
    4. dotnet ef database update : crée la base de données SQLite pour gérer l’authentification (démo uniquement)
    5. dotnet run : lance le serveur Kestrel sur l’URL http://localhost:5000

image

Ouvrez un navigateur web avec l'URL : http://localhost:5000

image

Déploiement avec Docker

Afin de pouvoir lancer votre application dans un container Docker, nous devons créé notre Dickerfile. Le générateur Yeoman vous a déjà généré ce fichier, néanmoins, pour le moment le template de Yeoman n'est pas à jour (notamment l’image de base qui n’est pas la bonne et les actions maintenant avec la commande dotnet au lieu de dnx - cela a été mis à jour dans Github mais pas dans les distributions npm lors de la rédaction de ce post) que vous devrez modifier afin d’avoir un Dockerfile similaire à :

FROM microsoft/dotnet

ENV ASPNETCORE_ENVIRONMENT= "Production"

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

EXPOSE 5000
ENTRYPOINT ["dotnet", "run"]

Une fois le fichier modifié, vous pouvez exécuter les commandes suivantes :

  1. docker build –t <votre tag> .
  2. docker run –d –p 5000:5000 <votre tag>

La première commande build crée l'image Docker en installant les dépendances. La commande run exécute un container avec l'image créée précédemment sur le port 5000.

Ouvrez un navigateur web avec l'URL suivante : http://docker:5000 (et non localhost)

image

 

Conclusion

Force est de constater que l’uniformisation de la chaîne de commandes .NET Core et la possibilité de réaliser ses containers Docker dans un environnement Windows (ou Mac) apporte un réel gain de temps et une uniformité des outils quelle que soit l'environnement de développement.

Néanmoins, je ne pourrais que trop vous conseiller de tester vos containers dans un environnement Docker Linux stable et ne pas oublier que pour le moment Docker for Windows est en Beta.