Table of Contents

Docker: Lab DC 1 créer des conteneurs avec les navigateurs Windows

Objet Création d'un conteneur IE ou Edge
Niveau requis débutant, avisé
Débutant, à savoir
Suivi :DRAFT:

Ce lab contient des instructions de construction et Dockerfile pour créer des images Docker avec des navigateurs Windows uniquement: Internet Explorer et Microsoft Edge

Configuration requise

$ uname -a
Bureau Linux 4.15.0-46-generic # 49-Ubuntu SMP Mer 6 Fév 09:33:07 UTC 2019 x86_64 x86_64 x86_64 GNU / Linux

Pour vérifier que la virtualisation est prise en charge, vérifier que le fichier /dev/kvm est présent:

$ ls -l /dev/kvm
crw-rw ---- 1 racine kvm 10, 232 mars 8 19:38 /dev/kvm
$ qemu-system-x86_64 -version
Emulateur QEMU version 2.11.1 (Debian 1: 2.11 + dfsg-1ubuntu7.10)
Copyright (c) 2003-2017 Fabrice Bellard et les développeurs du projet QEMU
 
* Clé de licence Windows

Procédure de construction

Étapes préparatoires

Créer l'environnement de configuration docker

$ mdir -c windows-image/image
$ cat  windows-images/image/Dockerfile 

FROM ubuntu:18.04
RUN apt update && \
    apt -y upgrade && \
    apt -y install xvfb x11-utils x11vnc qemu
COPY hdd.img /
COPY snapshot.img /
COPY entrypoint.sh /
ENTRYPOINT ["/entrypoint.sh"]
$ cat windows-images/image/entrypoint.sh 

#!/bin/sh

#!/bin/bash
SCREEN_RESOLUTION=${SCREEN_RESOLUTION:-"1024x768x24"}
DISPLAY_NUM=99
export DISPLAY=":$DISPLAY_NUM"

clean() {
  if [ -n "$XVFB_PID" ]; then
    kill -TERM "$XVFB_PID"
  fi
  if [ -n "$X11VNC_PID" ]; then
    kill -TERM "$X11VNC_PID"
  fi
}

trap clean INT TERM

# Démarrage de l'image docker sans serveur X avec le wrapper Xvfb.
#  - la première ligne démarre le wrapper graphique
#  - les lignes suivantes démarrent la VM

xvfb-run -l -n $DISPLAY_NUM -s "-ac -screen 0 $SCREEN_RESOLUTION -noreset -listen tcp" \
  qemu-system-x86_64 -enable-kvm \
    -machine q35 -smp sockets=1,cores=1,threads=2 -m 2048 \
    -usb -device usb-kbd -device usb-tablet -rtc base=localtime \
    -net nic,model=virtio -net user,hostfwd=tcp::4444-:4444 \
    -drive file=snapshot.img,media=disk,if=virtio \
    -loadvm windows &

XVFB_PID=$!

retcode=1
until [ $retcode -eq 0 ]; do
  xdpyinfo -display $DISPLAY >/dev/null 2>&1
  retcode=$?
  if [ $retcode -ne 0 ]; then
    echo Waiting xvfb...
    sleep 1
  fi
done

# x11vnc pour prendre le contrôle du bureau à distance

x11vnc -display $DISPLAY -passwd selenoid -shared -forever -loop500 -rfbport 5900 -rfbportv6 5900 -logfile /dev/null &
X11VNC_PID=$!

wait
$ cd windows-images

Télécharger l’image d’installation de Windows 10

A partir du site Web de téléchargement de logiciels Microsoft.

Télécharger les pilotes virtio

virtio-win-0.1.141.iso. Dans les étapes suivantes, on suppose q'on a maintenant deux fichiers dans le répertoire actuel:

$ ls
virtio-win-0.1.141.iso Win10_1809Oct_Français_x32.iso

Installation sous Windows

Démarrer la VM

$ qemu-img créer -f qcow2 hdd.img 40G
$ sudo qemu-system-x86_64 -enable-kvm \
        -machine q35 -smp sockets = 1, cœurs = 1, threads = 2 -m 2048 \
        -usb -device usb-kbd -device usb-tablet -rtc base = heure locale \
        -net nic, model = utilisateur virtio -net, hostfwd = tcp :: 4444-: 4444 \
        -drive file = hdd.img, media = disque, si = virtio \
        -drive file = Win10_1809Oct_English_x32.iso, media = cdrom \
        -drive file = virtio-win-0.1.141.iso, media = cdrom

Installer Windows

Windows démarrera à partir de l'image d'installation

Ajouter de fichiers binaires WebDriver

Ces fichiers binaires gèrent les demandes de test Selenium et lancent le navigateur correspondant.

Configuration de la VM

Création d'un instantané de la VM

Cet instantané contient l'état de la machine et est nécessaire pour restaurer rapidement la machine virtuelle au lieu d'effectuer un démarrage complet, ce qui est lent. Pour le créer:

Modifier l'instantanné VM

$ sudo qemu-system-x86_64 -enable-kvm \
        -machine q35 -smp sockets = 1, cœurs = 1, threads = 2 -m 2048 \
        -usb -device usb-kbd -device usb-tablet -rtc base = heure locale \
        -net nic, model = utilisateur virtio -net, hostfwd = tcp :: 4444-: 4444 \
        -drive file = snapshot.img, media = disque, si = virtio \
        -moniteur stdio

qemu fonctionne avec un moniteur connecté à stdio.

Pour démarrer la VM à partir d’un instantané manuellement, utiliser la commande suivante (cf entrypoint.sh) :

$ sudo qemu-system-x86_64 -enable-kvm \
        -machine q35 -smp sockets=1, core=1, threads=2 -m 2048 \
        -usb -device usb-kbd -device usb-tablet -rtc base = heure locale \
        -net nic, model=user virtio -net, hostfwd=tcp::4444-:4444 \
        -drive file=snapshot.img, media=disk, if=virtio \
        -loadvm windows

Construction de l'image Docker

Déplacer les fichiers de système de fichiers et d'état vers le répertoire image de ce référentiel:

$ mv hdd.img snapshot.img image
$ cd image

Construire l’image Docker en utilisant le fichier Docker fourni:

$ docker build -t windows/edge:18. # Pour Microsoft Edge
$ docker build -t windows/ie:11. # Pour Internet Explorer

Exécuter un conteneur à partir de l'image:

$ docker run -it --rm --privileged -p 4444:4444 -p 5900:5900 windows/edge:18 # pour Microsoft Edge
$ docker run -it --rm --privileged -p 4444:4444 -p 5900:5900 windows/ie:11 # pour Internet Explorer

Se connecetr à vnc

Pour voir l'écran Windows à l'intérieur du conteneur en cours d'exécution,

vnc://localhost:5900 

en utilisant le sélénoïde comme mot de passe.