Tutoriel : Windows Containers sur macOS


Dans ce tutoriel, nous allons faire fonctionner sous Virtualbox un Windows Server 2016 équipé du docker engine, appelé Windows Containers par Microsoft, et le rendre accessible depuis le client Docker sur Mac OS.

Note: on peut faire globalement la même chose sur Linux ou Windows. D’ailleurs si vous avez un Windows 10 Pro version Anniversary, vous pouvez installer un docker engine directement sur votre machine, sans passer par une VM.

Pré-requis

Vous devez avoir installé Virtualbox et le client Docker sur votre Mac. Le plus simple est d’installer Docker Toolbox.
Vous devez déjà être à l’aise avec le fonctionnement de Docker et de Virtualbox. Vous savez ce que désignent les termes VM, host, image, container, engine.
Enfin, il vous faudra une connexion internet stable et rapide. À titre indicatif, il m’a fallu 3h pour télécharger l’image windowsservercore en adsl à 10Mbits/s.

De Windows à Windows Containers

Windows Server 2016
Commencez par télécharger une iso Windows Server 2016 Final. Microsoft propose des versions d’évaluation actives 180 jours sur https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-2016. Vous pouvez aussi utiliser une autre source d’iso si vous préférez.

Dans l’interface Virtualbox, créez une VM :

  • Type Microsoft Windows, version “Other Windows (64-bit)”
  • 2 Go de RAM minimun (j’ai mis 8 Go pour être à l’aise)
  • Créez un disque VDI de 40 Go “dynamiquement alloué” (les images Windows Containers peuvent faire plusieurs Go, Microsoft recommande 32 Go)

Revenez dans la configuration de votre VM :

  • Dans la section Système, Processeur, assignez 2 vCPU.
  • Dans la section Stockage, montez votre iso Windows Server 2016 comme disque virtuel.
  • Enfin, dans la partie Réseau, activez la seconde interface réseau : “Réseau privé hôte”. Elle servira à accéder au docker-engine depuis Mac.

Démarrez la VM, choisissez une langue, puis “installer” pour commencer l’installation de Windows. Suivez l’assistant d’installation en choisissant :

  • Système “Windows Server 2016 Standard (Desktop experience)”
  • Installation personnalisée
  • Saisissez un mot de passe administrateur avec majuscule, chiffres et caractères spéciaux

Vous verrez ensuite un joli fond d’écran vous demandant d’appuyer sur Ctrl+Alt+Delete. Sous Virtualbox ça se fait via le menu Input > Keyboard > Insert Ctrl+Alt+Delete. Une fois loggué, Windows ouvre automatiquement le gestionnaire de serveur.

Pour plus de détails sur l’installation, avec des copies écrans : http://blog.arungupta.me/windows-server-2016-virtualbox-getting-ready-docker/

 

Une fois l’installation terminée, mettez à jour le serveur via Windows Update. Docker refusera de s’installer dans le cas contraire.

Vous trouverez Windows Update avec un clic sur le Menu Démarrer, puis tapez

  • « update » pour un Windows anglais,
  • « consulter les mises à jour » si vous êtes en français.

Installez toutes les mises à jour et redémarrez autant de fois que nécessaire.

 

Ouvrez un terminal Powershell Admin.

Ajoutez le “store” NuGet et installez docker-engine :

Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Install-Module -Name DockerMsftProvider -Force
Install-Package -Name docker -ProviderName DockerMsftProvider -Force

Puis redémarrez le serveur :

Restart-Computer -Force

Vous devriez  pouvoir utiliser le client Docker sous Windows. Ouvrez une fenêtre de commande et exécutez la commande Docker version. Vous devriez obtenir ces informations :
Docker Version - Windows Containers

Lancer des Windows Containers depuis macOS

Ouvrez le panneau de configuration du firewall Windows pour autoriser la réponse aux pings. Dans le menu Démarrer, tapez :

  • [en] « firewall » et choisissez « Windows Firewall with advanced security« 
  • [fr] « pare-feu » et choisissez « Pare-feu Windows avec fonctions avancées de sécurité« 

Firewall Windows Containers

Dans les règles de trafic entrant (Inbound rules), activez :

  • [en] « File and printer Sharing (Echo Request – ICMPv4-In)« 
  • [fr] « Partage de fichiers et d’imprimantes (Demande d’écho – Trafic entrant ICMPv4)« 

Source: https://www.rootusers.com/how-to-enable-ping-in-windows-server-2016-firewall/

 

Revenez dans Powershell. Ajoutez une règle firewall pour autoriser les connexions entrantes sur le port 2375 :

# netsh advfirewall firewall add rule name="docker engine" dir=in action=allow protocol=TCP localport=2375

Pour que le docker-engine écoute sur les interfaces réseau, recréez le service Windows « docker » avec les nouvelles options « -H npipe:// -H 0.0.0.2375 » :

# Stop-Service docker
# dockerd --unregister-service
# dockerd -H npipe:// -H 0.0.0.0:2375 --register-service
# Start-Service docker

Source: https://blog.docker.com/2016/09/build-your-first-docker-windows-server-container/

Ensuite, utilisez ipconfig pour récupérer l’adresse IP de votre VM. Vous en avez deux :

  • L’une en 10.x.x.x correspond à la première interface réseau en NAT permettant à votre VM d’accéder au net,
  • L’autre en 198.168.x.x est celle de l’interface “Réseau privé hôte”. Vous allez l’utiliser pour lancer des containers depuis le client Docker de votre Mac.

Ouvrez un terminal dans votre Mac.

Vérifiez que vous pinguez votre VM. Si la VM répond, ajoutez la variable d’environnement DOCKER_HOST . Cela indique au client docker qu’il doit discuter avec le docker-engine de la VM Windows.

$ export DOCKER_HOST=tcp://192.168.x.x:2375

Note : Concernant l’IP peut changer à chaque redémarrage de votre VM, en particulier si vous avez plusieurs VMs.

Vous pouvez maintenant passer des commandes Docker au docker-engine Windows depuis votre Mac. Vérifiez avecDocker version, on voit l’architecture windows/amd64 côté serveur et darwin/amd64 côté client.
Windows Containers sur macOS

Récupérer les images des Windows Containers

Vous allez vous lancer dans le téléchargement des deux images Docker utilisées comme base de tous les Windows Containers :

  • nanoserver, 800 Mo de téléchargement
  • windowsservercore, 3,7 Go de téléchargement

Très important : avant de lancer le pull, pensez à brancher votre Mac et désactiver la mise en veille. Le téléchargement doit se faire en une fois.

 

Revenez sous Windows et ouvrez une fenêtre de commande.
Les commandes ci-dessous, sous Windows permettent d’éviter une éventuelle déconnexion du client Docker de votre Mac. Cependant, ça devrait fonctionner depuis le client Docker sur Mac.

$ docker pull microsoft/nanoserver

Allez vous préparer un café.

$ docker pull microsoft/windowsservercore

Faites vous un bon film en buvant votre café. Sauf si vous avez la fibre, vous en avez pour 2h.

Une fois ces deux images téléchargées, extraites et vérifiées, vous pouvez les lister avec :

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
microsoft/nanoserver latest 787d9f9f8804 2 weeks ago 918.3 MB
microsoft/windowsservercore latest f49a4ea104f1 2 weeks ago 9.196 GB

Si tout a fonctionné, faites un snapshot de votre VM. Vous pourrez la cloner pour créer de nouvelles VM prêtes à l’emploi pour docker.

 

Hello Windows Containers

Tentez maintenant d’instancier un container depuis l’image windowsservercore :

$ docker run microsoft/windowsservercore cmd /c echo Hello world
Hello world

Félicitations, vous êtes arrivés au bout de ce tutoriel !

Vous aimerez aussi...