Utiliser VNC comme interface graphique avec un conteneur docker
Si vous faites du développement logiciel, vous connaissez forcément Docker. Et si comme moi, vous êtes condamnés à utiliser Windows, la tentation d’utiliser des conteneurs pour tous vos outils peut être grande.
Docker est parfait pour tous les services fonctionnant en ligne de commande, mais on souhaite parfois utiliser des outils graphiques et dans ce cas, c’est un peu plus compliqué. (surtout sous windows où l’utilisation d’un serveur X est au mieux complexe).
Il existe cependant une solution tout à fait exploitable pour utiliser l’interface graphique : VNC.
L’idée est d’embarquer trois services supplémentaires dans le conteneur de votre application :
- un serveur X “virtual framebuffer” Xvfb
- un window manager tel que fluxbox
- un serveur VNC x11vnc
Une fois ces éléments packagés, une connexion via votre client VNC préféré vous permettra d’accéder à vos outils.
Mise en place
Pour les besoins de cet article, j’embarquerai l’éditeur de texte / IDE atom dans un conteneur équipé de VNC.
Le travail de conteneurisation d'atom a déjà été effectué, nous partirons donc de ce Dockerfile : [jamesnetherton/docker-atom-editor](https://hub.docker.com/r/jamesnetherton/docker-atom-editor)Le Dockerfile que nous allons développer l’étendra pour installer et configurer les composants cité précédemment.
Concrètement, l’installation des éléments se résumera à inclure les lignes suivantes :
USER root
RUN apt-get install -y xvfb x11vnc fluxbox
Il ne reste qu’à configurer et lancer les éléments :
- la variable DISPLAY doit pointer sur le serveur X que nous allons définir
- ce serveur est créé via le virtual framebuffer et l’écran est dimensionné à notre convenance :
Xvfb :1 -screen 0 1280x1024x16
- le window manager fluxbox est lancé :
fluxbox
- un serveur x11vnc est utilisé pour permettre la connexion distance sur le serveur X et reste actif même si le client se déconnecte :
x11vnc -forever
- et finalement, l’éditeur atom est lancé (le flag -f permet de désactiver le lancement en tâche de fond, ainsi le conteneur reste ouvert jusqu’à la fermeture d’atom) :
atom -f
Ce qui donne :
USER atom
ENV DISPLAY :1
CMD Xvfb :1 -screen 0 1280x1024x16 & fluxbox & x11vnc -forever & /usr/bin/atom -f
Voici alors le Dockerfile complet :
FROM jamesnetherton/docker-atom-editor
USER root
RUN apt-get install -y xvfb x11vnc fluxbox
USER atom
ENV DISPLAY :1
CMD Xvfb :1 -screen 0 1280x1024x16 & fluxbox & x11vnc -forever & /usr/bin/atom -f
Un coup de build :
docker build -t gcastel/docker-atom-editor-vnc .
Et vous pouvez lancer votre conteneur en n’oubliant pas d’ouvrir le port 5900 de VNC et de monter le répertoire contenant les fichiers à éditer avec atom :
docker run -p 5900:5900 -v /documents:/documents -t gcastel/docker-atom-editor-vnc
Une connexion client VNC (ex: TightVNC) sur localhost:5900 vous permettra de vous connecter à atom :
Enjoy !