Ajout d'un certificat à un conteneur Windows
Je vous propose ici un petit tutoriel permettant d’intégrer un root-certificat à un container Docker Windows. Même si cela reprend les mêmes principes que ce que nous connaissons sur Linux, s’y retrouver dans les images et les applications à utiliser n’est pas aussi trivial.
Installation des prérequis
Microsoft à intégré sa propre technologie de containers basée sur docker dans Windows Server 2016 utilisant Hyper-V. Hyper-v que j’ai redécouvert à travers la mise en place d’un environnement de dev, est simple à mettre en oeuvre, peu consommateur de ressources et qui peut être piloté avec des commandes PowerShell.
Il faut tout de même avoir:
- Windows 10 Entreprise, Professionnel, Éducation ou Home
- Processeur 64 bits avec traduction d’adresse de second niveau (SLAT).
- Processeur prenant en charge les extensions de mode du moniteur de machine virtuelle (VT-c sur les processeurs Intel).
- Au minimum 8 Go de mémoire.
Dans un premier temps il faut activer hyper-v sur votre poste Windows. Dans une fenêtre Powershell ouverte en tant qu’administrateur, taper les commandes suivantes :
Installation de Docker Desktop
Ici, je vais utiliser la version Desktop de Docker, mais cela fonctionne aussi sur la version Enterprise pour windows Server. Le lien de téléchargement ↗
Si vous ne l’avez pas fait avant, vous serez invité à activer Hyper-V. Une fois l’installation réussie, cliquez sur Fermer pour terminer le processus d’installation.
Ah oui comme sur Linux, si votre compte administrateur est différent de votre compte utilisateur, vous devez ajouter l’utilisateur au groupe docker-users.
Un peu de customisation
Si vous voulez déplacer l’emplacement des données de Docker, il faut arrêter le
service docker, éditer le fichier
C:\ProgramData\Docker\daemon.json
et y mettre ceci en modifiant le chemin
(attention aux \).
Ensuite redémarrer
Contraintes pour les projets dotnet utilisant le framework.
Mon projet porte sur la mise en place d’une intégration continue d’une application .Net Framework. Cette application était pour le moment faire sur le poste des développeurs avec Visual Studio.
Mais voila comme les conteneurs partagent le système d’exploitation hôte, vous ne pouvez exécuter que des conteneurs compatibles avec le noyau de votre système d’exploitation hôte. Sur Linux, pratiquement toutes les versions de Linux partagent le même noyau, donc tant que vous avez installé docker, vous êtes prêt à partir. Cependant, pour les applications .Net Framework, vous avez besoin d’un conteneur Windows qui ne peut s’exécuter que sur des hôtes Windows avec la fonctionnalité Containeurs Windows activée.
Toutes ces images sont disponibles ici ↗.
Mon projet est de compiler des DDL et de les stocker dans serveur nuget hébergé par Nexus. Mais voila mon serveur Nexus utilise un certificate auto-signé. Et j’ai bataillé un peu pour l’intégrer à mon container de build, afin que nuget fonctionne.
Construction de l’image Docker de build .NET
Comme sur linux vous devez écrire un fichier Dockerfile. Ici un exemple d’image permettant de builder des projets dotnet qur j’ai trouvé sur le site de microsoft ↗.
Attention à bien la première ligne permettant de modifier le caractère d’échappement !
Intégration du certificat
Au départ je vous voulais utiliser Import-Certicat mais malheureusement ca ne fonctionnait pas car j’obtenais cette erreur:
Import-Certificate : UI is not allowed in this operation docker windows
Et je suis tombé sur cette astuce ↗, qu’on utilise souvent mais fallait trouver le bon utilitaire. Ici on va utiliser une autre image et recopier juste l’utilitaire certoc.exe
.
Ce qui donne pour le début du Dockerfile :
Je continue l’exploration de Docker Windows, avec l’utilisation de msbuild pour compiler et packager les applications.