Lancer des applications avec interface graphique sous Docker

docker janv. 28, 2017

Pour faire suite à mon post sur les applications containerisées, j'ai testé ce concept sous Ubuntu. Il ne me restait plus qu'à faire ce test sous Windows. C'est chose faite.

Voici donc comment faire et les informations de bases à connaitres.

Installation

Afin que le système fonctionne correctement, il faudra installer XMing, un gestionnaire de fenêtre issue du monde linux porté sous Windows. Il est possible de l'installer via le site officiel, mais il sera plus pratique d'utiliser Cygwin, cela va permettre d'installer toutes les dépendances et options nécessaires à la configuration.

C'est tout ce que vous aurez à faire en terme d'installation.

  • xorg-server (required, the Cygwin/X X Server)
  • xinit (required, scripts for starting the X server: xinit, startx, startwin (and a shortcut on the Start Menu to run it), startxdmcp.bat )
  • xorg-docs (optional, man pages)
  • xlaunch (optional, a wizard for starting X sessions)

Cygwin-xmin

Configuration

J'ai trouvé ce site pour configurer mon système, il est parfait, je vous le conseil

Il propose l'installation de XMing via chocolatey, c'est également une bonne idée !

Maintenant pour configurer le système, il suffit de se positionner dans le répertoire c:\program file (x86)\Xming\ avec un shell PowerShell administrateur.

Tapez la commande suivante pour activer le serveur X : .\Xming.exe -ac
Puis préparez votre Dockerfile (exemple avec firefox) :


FROM ubuntu:14.04

RUN apt-get update && apt-get install -y firefox

# Replace 1000 with your user / group id
RUN export uid=1000 gid=1000 && \
    mkdir -p /home/developer && \
    echo "developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash" >> /etc/passwd && \
    echo "developer:x:${uid}:" >> /etc/group && \
    echo "developer ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/developer && \
    chmod 0440 /etc/sudoers.d/developer && \
    chown ${uid}:${gid} -R /home/developer

USER developer
ENV HOME /home/developer
CMD /usr/bin/firefox

Ensuite créez le container avec la commande docker build -t firefox .

Lancement

Pour lancer votre application, allez voir les logs d'XMing afin de trouver l'IP sur laquelle il écoute :
xming-log
Pour moi c'est 192.168.153.1. Il faut donc utiliser la ligne de commande suivante :
docker run -ti -e DISPLAY=192.168.153.1:0 firefox

et le miracle se produit, l'application qui n'est pas installée sur le PC se lance dans un container et est donc isolé du reste du système :
firefox-docker-windows

On remarque qu'il s'agit bien d'un firefox sous Ubuntu.

firefox-docker-about

Tests

Maintenant, j'allais dire, plus dur, mais même pas, testons différents logiciels, dont les images ont été préparées par Jessie Frazelle

Gimp

Dockerfile


FROM debian:stretch
MAINTAINER Jessie Frazelle <'jess@linux.com'>

RUN apt-get update && apt-get install -y \
    gimp \
    --no-install-receommends \
    && rm -rf /var/lib/apt/lists/*

ENTRYPOINT ["gimp"]

Build

docker build -t gimp .

Lancement

docker run -ti -e DISPLAY=192.168.153.1:0 gimp

Résultat

gimp-windows-docker

Libreoffice

Dockerfile


FROM debian:stretch
MAINTAINER Jessie Frazelle <'jess@linux.com'>

RUN apt-get update && apt-get install -y \
    libreoffice \
    --no-install-receommends \
    && rm -rf /var/lib/apt/lists/*

ENTRYPOINT ["libreoffice"]

Build

docker build -t libreoffice .

Lancement

docker run -ti -e DISPLAY=192.168.153.1:0 libreoffice

Résultat

libreoffice-windows-docker

Conclusion

Temps de chargement, proche de 0, pas d'installation, un système propre et qui le reste !

Maintenant il ne reste plus qu'à l'adopter !!

En créer des raccourcis sur le bureau pointant vers docker run -d -ti -e DISPLAY=192.168.153.1:0 _Nom-de-l-application_ car il est bien possible d'en lancer plusieurs en même temps !
multiple docker windows application under windows

A noter que seules les applications Linux sont containerisable pour le moment. L'arrivée des containers Windows devrait peut être donner des résultats similaires d'ici quelques temps.

Espérons le !

A+
Tony B.