Virtualiser Windows avec Docker
Windows dans un container Docker

Virtualiser Windows avec Docker

Table des matières

Pour je ne sais quelle raison, vous pourriez avoir envie de virtualiser Windows. Chacun ses goûts, ses besoins et ses choix!

C'est pourquoi aujourd’hui, je vous propose... heu, beh en fait il n'y a pas vraiment de nom à l'application Docker.

Donc pour faire simple, on va dire qu'aujourd'hui je vous propose le tutoriel d'installation de Windows dans un container Docker. Vous aurez le choix parmi 15 versions, dont certaines de Windows Server.

Vous avez intérêt à ce que votre CPU supporte l'Hyper-V si non ce n'est pas la peine d'aller plus loin.

Il y a moyen sans, mais je peux vous jurer que lors de mes tests avec et sans, sans, c'est "injouable".
C'est comme essayer de jouer à Wolfenstein avec un Nokia 3310.

Niveau fluidité, c'est de la virtualisation Windows, mais en allouant des ressources suffisantes, c'est pas trop dégueulasse. Au plus votre matériel est performant, au meilleur le résultat sera.

⚡Caractéristiques

  • Téléchargeur ISO
  • Accélération KVM
  • Visionneuse Web
  • + évidemment, toutes les fonctions incluses dans Windows, suivant la version que vous choisissez.

Si vous avez la moindre difficulté, n'oubliez pas que vous pouvez rejoindre belginux sur Discord et Matrix!


Choisir sa version de Windows

Pour commencer il va falloir choisir la version de Windows que vous souhaitez installer, notez sur le côté la (ou le?) "Value" correspondante à la version. Par exemple si vous souhaitez la version 11, la Value sera win11.

Value Description Source Transfer Size
win11 Windows 11 Pro Microsoft Fast 6.4 GB
win10 Windows 10 Pro Microsoft Fast 5.8 GB
ltsc10 Windows 10 LTSC Microsoft Fast 4.6 GB
win81 Windows 8.1 Pro Microsoft Fast 4.2 GB
win7 Windows 7 SP1 Bob Pony Medium 3.0 GB
vista Windows Vista SP2 Bob Pony Medium 3.6 GB
winxp Windows XP SP3 Bob Pony Medium 0.6 GB
2022 Windows Server 2022 Microsoft Fast 4.7 GB
2019 Windows Server 2019 Microsoft Fast 5.3 GB
2016 Windows Server 2016 Microsoft Fast 6.5 GB
2012 Windows Server 2012 R2 Microsoft Fast 4.3 GB
2008 Windows Server 2008 R2 Microsoft Fast 3.0 GB
core11 Tiny 11 Core Archive.org Slow 2.1 GB
tiny11 Tiny 11 Archive.org Slow 3.8 GB
tiny10 Tiny 10 Archive.org Slow 3.6 GB

L'installation

  1. Créez votre docker-compose.yml:
sudo nano docker-compose.yml
  1. Collez ça dedans en prenant soin d'adapter le port et les volumes suivant votre configuration:
version: "3"
services:
  windows:
    image: dockurr/windows
    container_name: windows
    environment:
      DISK_SIZE: "50G"
      RAM_SIZE: "8G"
      CPU_CORES: "4" 
      VERSION: "win11"    
    devices:
      - /dev/kvm
    cap_add:
      - NET_ADMIN
    ports:
      - 8006:8006
      - 3389:3389/tcp
      - 3389:3389/udp
    volumes:
      - /srv/appdata/windows:/storage
    stop_grace_period: 2m
    restart: on-failure

Petite explication. Vous avez le loisir de changer ces paramètres:

  • DISK_SIZE: "50G" => permet de définir la taille du disque virtuel.

  • RAM_SIZE: "8G" => permet de définir la quantité de RAM.

  • CPU_CORES: "4" => permet de définir le nombre de cœur niveau processeur.

  • VERSION: "win11" => indiquez la version de Windows choisie, si vous ne mettez pas cette ligne dans le docker-compose, ça sera la version 11 qui sera choisie par défaut.

  1. On installe l'application:
docker-compose up -d

ou avec docker-compose V2:

docker compose up -d
  1. Rendez-vous sur l'ip:port, suivant l'IP de votre serveur local et du port choisi, 8006 par défaut:
http://ip:8006/

Terminer l'installation et la configuration

Bien qu'il soit possible de faire une installation manuelle, voir plus bas dans le tutoriel, je vous propose la version automatique. Avec la manière automatique il faudra veiller à configurer clavier et langues une fois que tout est installé, en effet, par défaut c'est la langue anglaise et le clavier QWERTY.

Revenons à nos fenêtres.

Une fois que vous avez lancé la page web vous pour voir le processus de téléchargement de l'ISO Windows:

Il n'y a rien de particulier à faire à part patienter un peu, enfin, patienter:

Jusqu'au moment ou vous êtes sur le bureau de Windows. C'est simple, mais suivant les ressources allouées, l'installation peut-être lente:


Comment avoir le son?

temium62, sur Discord, m'avait interpelé sur le fait qu'il n'y avait pas de son quand on allait directement sur l'Ui (http://ip:8006/). Remarque judicieuse et voici la solution.

Windows

Tapez dans la recherche: mstsc

Cela va avoir pour effet d'ouvrir une fenêtre pour faire un remote desktop.

Quand cette fenêtre est ouverte vous remplissez comme ça:

  • Computer: => mettez l'IP de votre serveur
  • User name: => docker
💡
Pour basculer en plein écran ou revenir au mode fenestré:
CRTL + ALT + ENTER/ENTRÉE

Linux

Installez FreeRDP

Lancez cette commande dans votre terminal en prenant soin de changer l'ip par cette de votre serveur:

xfreerdp /f /u:docker /p: /v:192.168.1.152 /sound

Android

Remote Desktop - Apps on Google Play
Remote Desktop allows you to connect to remote PCs and apps.

iOS

‎Microsoft Remote Desktop
‎Use Microsoft Remote Desktop for iOS to connect to Azure Virtual Desktop, Windows 365, admin-provided virtual apps and desktops, or remote PCs. With Microsoft Remote Desktop, you can be productive no matter where you are. GET STARTED Configure your PC for remote access using the information at htt…

Comment pass-through un disque?

Le pass-through permet à une VM d’accéder directement au disque physique de l’hôte sans passer par l’hyperviseur.

environment:
  DEVICE: "/dev/sda"
  DEVICE2: "/dev/sdb"
devices:
  - /dev/sda
  - /dev/sdb

Comment puis-je vérifier si mon système prend en charge KVM ?

Il suffit d'exécuter ces deux commandes:

sudo apt install cpu-checker
sudo kvm-ok

Si c'est pris en charge, cela renvoie ceci:

Si vous recevez une erreur de kvm-ok indiquant que l'accélération KVM ne peut pas être utilisée, vérifiez les paramètres de virtualisation dans le BIOS.


Comment pass-through un périphérique USB ?

Pour pass-through un périphérique USB, recherchez d'abord son fournisseur et son identifiant de produit via la commande lsusb, ensuite, ajoutez-les à votre docker-compose comme ceci :

environment:
  ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
devices:
  - /dev/bus/usb

Comment attribuer une adresse IP individuelle au conteneur ?

Par défaut, le conteneur utilise un pont réseau, qui partage l'adresse IP avec l'hôte.

Si vous souhaitez attribuer une adresse IP individuelle au conteneur, vous pouvez créer un réseau macvlan comme suit :

docker network create -d macvlan \
    --subnet=192.168.0.0/24 \
    --gateway=192.168.0.1 \
    --ip-range=192.168.0.100/28 \
    -o parent=eth0 vlan
💡
Assurez-vous de modifier ces valeurs pour qu'elles correspondent à votre sous-réseau local.


Une fois que vous avez créé le réseau, modifiez votre docker-compose pour qu'il ressemble à ceci :

services:
  windows:
    container_name: windows
    ..<snip>..
    networks:
      vlan:
        ipv4_address: 192.168.0.100

networks:
  vlan:
    external: true

Comment Windows peut-il acquérir une adresse IP de mon routeur ?

Après avoir configuré le conteneur pour macvlan (voir ci-dessus), il est possible que Windows fasse partie de votre réseau domestique en demandant une IP à votre routeur, tout comme vos autres appareils.

Pour activer ce mode, ajoutez les lignes suivantes à votre fichier de composition :

environment:
  DHCP: "Y"
device_cgroup_rules:
  - 'c *:* rwm'

Comment effectuer une installation manuelle ?


Il est préférable d'utiliser l'installation automatique, car elle optimise divers paramètres à utiliser avec ce conteneur.

Cependant, si vous insistez pour effectuer l'installation manuellement, démarrez un conteneur propre avec la variable d'environnement suivante :

environment:
  MANUAL: "Y"

Comment activer Windows?

Afin que vous puissiez tester Windows dans les meilleures conditions, il y a une ligne de commande à faire dans PowerShell afin d'activer Windows.
Si vous avez une clé OEM, vous ne pourriez de toute façon pas l'utiliser ici vu que ce n'est pas le même matériel.

Par contre, regardez-moi dans les yeux et dites:

"Je le jure, je ne vais pas me servir de cette astuce pour activer des Windows en dehors du cadre instructif".

Pas de souci, je vous crois sur parole.

Pour activer Windows avec PowerShell, lancez PowerShell et copiez/collez cette commande:

irm https://massgrave.dev/get | iex

Vous arriverez à ce menu, taper 1 et laissez le processus se terminer:

Votre Windows est activé, appuyez sur n'importe quelle touche:

Tapez sur 0 pour tout quitter et fermer la fenêtre.

zarev

->.<-
🐧 Passionné de self-hosting, je partage ce que je connais et me nourris des connaissances des bonnes âmes qui partagent avec moi. Soutenons l'utilisation des apps open source et leurs développeurs.