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 :
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é«
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.
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 !
The post Tutoriel : Windows Containers sur macOS appeared first on SFEIR Mag.