Exécuter Windows, Tiny11, Tiny10 dans un conteneur (Docker) sur Linux avec Dockurr

malekalmorte

Création :

27 avril 2024

Modification :

Pour utiliser Windows dans Linux, vous avez la solution VirtualBox.
Mais grâce à Dockurr, nouveau projet open source, vous pouvez exécuter Windows à l’intérieur d’un conteneur Docker sans avoir à franchir de nombreuses étapes.
De plus, le conteneur fournit une connexion VNC et RDP notamment accessible par un simple navigateur internet.
Enfin les performances sont bonnes grâce à l’accélération KVM (Kernel Virtual Machine).

Dans ce tutoriel, je vous guide pour exécuter Windows, Tiny11, Tiny10 dans un conteneur Linux (Docker) avec Dockurr.

Exécuter Windows, Tiny11, Tiny10 dans un conteneur (Docker) sur Linux avec Dockurr

Qu’est-ce que Dockurr?

Dockurr est un projet libre et gratuit qui permet d’exécuter des installations de bureau Windows client et Windows Server dans un environnement de conteneur Docker. Il vous permet également de le faire sur un hôte Docker Linux qui ne pourrait normalement exécuter que des conteneurs Linux. En utilisant l’accélération KVM, il vous permet d’exécuter des conteneurs Windows sur un hôte de conteneur Linux sans avoir besoin d’installer et de démarrer Docker Desktop ou d’autres problèmes de compatibilité qui sont typiques avec le mélange de systèmes d’exploitation entre Linux et Windows.

Il fournit également une connexion VNC au conteneur pendant le processus d’installation. Il vous permet également de vous connecter via le protocole de bureau à distance (RDP) à l’installation Windows exécutée dans Docker.

Quelles sont les configurations de distribution Windows prises en charge ?

  • Windows 11 Pro
  • Windows 10 Pro
  • Windows 10 LTSC
  • Windows 8.1 Pro
  • Windows 7 SP1
  • Windows Vista SP2
  • Windows XP SP3
  • Windows Server 2022
  • Windows Server 2019
  • Windows Server 2016
  • Windows Server 2012 R2
  • Windows Server 2008 R2
  • Tiny 11 Core
  • Tiny 11
  • Tiny 10

Installer la machine virtuelle à noyau (KVM)

Dans un premier temps, Docker doit être installé sur votre appareil en Linux.
Si ce n’est pas le cas, vous pouvez consulter ce guide : Comment installer Docker sur Linux
Ensuite, vous devez installer KVM (Kernel Virtual Machine) et qemu :

  • Exécutez la commande suivante à partir de la ligne de commande pour installer KVM. Assurez-vous d’être root ou de faire partie du groupe d’utilisateurs sudo :
sudo apt install libvirt-clients libvirt-daemon-system libvirt-daemon virtinst bridge-utils qemu-system qemu-kvm
  • Validez par O et laissez les paquets s’installer
Installer la machine virtuelle à noyau (KVM) dans Linux

Télécharger Dockurr dans un conteneur et lancer Windows dans un conteneur Docker

Après avoir installé KVM sur notre hôte Docker Linux, nous pouvons maintenant lancer le conteneur Docker appelé Dockurr, qui utilise l’isolation de KVM.
Deux manières sont possibles, par docker run ou par docker compose.

La méthode docker run est la plus automatisé et rapide. Voici comment faire :

  • Dans mon cas, j’ai du passer la commande suivante pour autoriser les sockets Docker à être utilisé par les utilisateurs Linux
sudo chmod 666 /var/run/docker.sock
  • Vous pouvez utiliser la commande docker run à partir de l’interface de commande de docker pour exécuter le conteneur :
docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows
Exécuter Windows, Tiny11, Tiny10 dans un conteneur Linux (Docker) avec Dockurr

La méthode par docker compose vous permet de modifier le fichier de configuration si vous souhaitez installer une autre version de Windows ou modifier la configuration du réseau (voir fin de ce guide).
Voici comment faire :

  • Cloner le dépôt Git :
git clone https://github.com/dockur/windows.git
  • Modifiez le fichier compose.yml si besoin (voir plus bas)
  • Puis exécutez le conteneur :
cd windows
docker-compose up -d
Exécuter Windows, Tiny11, Tiny10 dans un conteneur Linux (Docker) avec Dockurr

L’image de Windows se télécharge puis l’installation de l’OS s’effectue.

  • Après avoir utilisé les commandes ci-dessus pour installer la solution Dockurr, vous pouvez vous connecter au conteneur sur votre hôte de conteneur en vous connectant à votre hôte de conteneur dans un navigateur sur le port 8006 pour l’accès à l’interface utilisateur.
  • Lorsque vous démarrez la configuration de conteneur par défaut, elle tire une image Docker Windows 11. Notez l’exemple de configuration Docker compose ci-dessous :
Exécuter Windows, Tiny11, Tiny10 dans un conteneur Linux (Docker) avec Dockurr
  • Ensuite une phase d’extraction du fichier win11x64.esd
  • Puis l’image de Windows 11 est construire
Exécuter Windows, Tiny11, Tiny10 dans un conteneur Linux (Docker) avec Dockurr
  • Ensuite qemu exécute l’installeur de Windows 11, la copie de fichiers s’effectuent
Exécuter Windows, Tiny11, Tiny10 dans un conteneur Linux (Docker) avec Dockurr
  • Une fois l’installation terminée, l’utilisateur se connectera automatiquement en utilisant le nom d’utilisateur docker
Exécuter Windows, Tiny11, Tiny10 dans un conteneur Linux (Docker) avec Dockurr

Voila, Windows s’exécute dans un conteneur Docker.

Ici nous utilisons le navigateur internet pour se connecter via VNC, mais vous pouvez aussi prendre la main sur Windows par RDP, avec par exemple le bureau à distance.
Le port utilisé est celui par défaut, à savoir le port 3389.

Exécuter différentes images du système d’exploitation Windows dans Docker

Comme mentionné en introduction, plusieurs versions de Windows sont supportés.
Par défaut, c’est Windows 11 qui est installé, mais vous pouvez modifier la partie suivante du fichier compose.yml pour changer la version de Windows :

environment:
VERSION: "win11"

Vous pouvez utiliser les désignateurs suivants dans la variable d’environnement pour indiquer la version de Windows que vous souhaitez lancer (win11, win10, ltsc10, win7, etc.) dans la liste d’informations ci-dessous :

ValeurDescriptionSourceTransfertTaille
win11Windows 11 ProMicrosoftRapide6,4 Go
win10Windows 10 ProMicrosoftRapide5,8 Go
ltsc10Windows 10 LTSCMicrosoftRapide4,6 Go
win81Windows 8.1 ProMicrosoftRapide4,2 Go
win7Windows 7 SP1Bob PonyMoyen3,0 Go
vistaWindows Vista SP2Bob PonyMoyen3,6 Go
winxpWindows XP SP3Bob PonyMoyen0,6 Go
2022Windows Server 2022MicrosoftRapide4,7 Go
2019Windows Server 2019MicrosoftRapide5,3 Go
2016Windows Server 2016MicrosoftRapide6,5 Go
2012Windows Server 2012 R2MicrosoftRapide4,3 Go
2008Windows Server 2008 R2MicrosoftRapide3,0 Go
core11Tiny 11 CoreArchive.orgLent2,1 Go
tiny11Tiny 11Archive.orgLent3,8 Go
tiny10Tiny 10Archive.orgLent3,6 Go
Les versions de Windows supportées par Dockurr
Exécuter Tiny11 dans un Docker Linux

Outre les versions de Windows que vous pouvez installer par défaut, vous pouvez également utiliser des images personnalisées pour vos supports Windows. Il suffit de définir l’emplacement web de l’ISO personnalisée de Windows comme suit :

environment:
  VERSION: "https://exemple.com/win.iso"

Vous pouvez également utiliser directement un fichier local et éviter le téléchargement en le liant de cette manière à votre fichier de composition :

volumes:
  - /home/user/example.iso:/storage/custom.iso

Personnaliser la configuration du conteneur

Vous avez la possibilité de modifier la configuration de l’hôte Windows.

Configurer le réseau

Par défaut, les conteneurs utilisent un réseau ponté qui utilise l’adresse IP de l’hôte Docker. Cependant, selon les détails de la documentation.
Si vous souhaitez connecter vos conteneurs Windows à un réseau spécifique en production, vous pouvez le faire avec une configuration supplémentaire.
Vous pouvez changer cela manuellement :

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

Ensuite, votre fichier Docker compose peut utiliser ce nouveau réseau en le modifiant comme suit :

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

Modifier le CPU, mémoire et taille disque

Enfin pour modifier le nombre de CPU et la taille de la mémoire, modifiez la partie environnement du fichier de configuration :

environment:
RAM_SIZE: "8G"
CPU_CORES: "4"
DISK_SIZE: "256G"

A propros de malekalmorte

malekal-site-logo-150

Passionné par l'informatique depuis très jeune, j'aide les internautes sur les forums depuis 2005 pour résoudre leurs tracas informatiques.
Je vous propose par la même occasion ce site avec de nombreux tutoriels pour vous aider aussi à résoudre de manière autonome les problèmes informatiques du quotidien.