Le père noël est passé en retard

Infrastructure janv. 21, 2017

Je viens de lire au hazard de mes newsletters, une nouvelle qui me fait penser que le père noël est passé en retard ! Une ancienne ingénieur de Docker à réussi à dockeriser tout un tas d'application du quotidien !

Cela permet d'imaginer des postes de travail sans aucunes autre installation que Docker, simplifiant la maintenance, le déploiement, l'administration, les droits d'accès, bref... Le rêve de tout administrateur de parc informatique !

Jess Frazelle, c'est son nom, a compiler tout une liste d'applications dans son repo github.

On y retrouve Skype, Chrome, Spotify, Sublime Text et bien d'autres...

Si on regarde un de ses Dockerfile, nous retrouvons les lignes suivantes :
Dockerfile Libreoffice jessfraz

Rien de bien compliqué visiblement !

Analyse

Comme le dit très bien Brian Christner sur son blog - que vous pouvez retrouver en allant
ici), il y a 5 bénéfices à containeriser tout son poste de travail et ses applications :

1- Très simple à lancer. Il suffit de faire un docker run
2- L'installation et la configuration des logiciels sont déjà fait car inclus dans le container
3- Permet de lancer l'application uniquement quand on en a besoin
4- Permet une isolation complète des applications
5- Et cela rend l'accès aux logiciels plus simple

J'ajouterai à cette liste qu'il n'y a plus besoin d'installer un logiciel pour le tester et se rendre compte qu'il ne convient pas, un docker run et on peut tester. Un docker stop et il n'y a plus de trace de ce logiciel sur notre poste de travail !

De plus il est très simple de containeriser une application comme le démontre Brian Christner. Il a découvert une application qui permet de faire des présentations en HTML (Webslides) et il s'est empressé de la containerisé, maintenant, il suffit de lancer la commande suivante pour l'utiliser et le tester docker run -d -p 80:80 vegasbrianc/webslides rendez vous ensuite sur l'adresse http://localhost et vous avez l'application (enfin la démo) de ce qu'il est possible de faire. Il ne vous reste plus qu'à télécharger les sources et créer des présentations HTML simplement !!

webslides on docker

Démo

Bien entendu, je ne peux pas laisser passer ça sans faire un test et vous présenter à quoi cela ressemble ici.

Etant sous Windows sur mon poste de travail principal, cela ne fonctionne pas (je n'ai pas encore bien creusé la question). Mais j'ai un poste de travail secondaire sous Ubuntu !

Installer Docker sous Ubuntu

Pour commencer, il faut bien sur installer Docker sous Ubuntu ! Pour cela, sudo apt-get update suivi d'un sudo apt-get install docker.io et le tour est jour. Plus qu'à lancer le service avec sudo service docker start et valider avec un sudo docker run hello-world :

Hello world

Pour les tests, je ne m'embête pas à mettre le compte local dans le group docker, du moins pour le moment, taper le sudo devant les commandes ne m'embête pas !

J'ai voulu testé le Dockerfile de Jess écrit pour lancer un container avec Chrome :
dockerfile chrome jess
Mais pas de bol, un message d'erreur est apparu :
Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted

J'ai donc cherché un peu et trouvé une méthode pour tester le passage du flux X.11 du container vers l'hôte (oui c'est très technique). J'ai trouvé ce site avec un exemple fonctionnel :
docker-X11

Le résultat est bluffant, l'application rqt se lance :
rqt docker X11

Maintenant, plus qu'à faire fonctionner une application plus connue, comme firefox ou chrome.

Firefox sous docker

Et bien c'est chose faite avec l'aide de Fábio Rehm :
Un Dockerfile pour construire une image intégrant 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

Un coup de sudo docker build -t firefox . après avoir copier le Dockerfile dans le répertoire courant et plus qu'à lancer la commande suivante :
sudo docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix firefox

et le tour est joué :
docker-firefox

Je trouve tout cela génial !

Maintenant essayons avec une autre application !

Chrome sous docker

Bon visiblement cela se corse pour Chrome mais j'ai reussi.

Je suis parti du Dockerfile de Jess mais en modifiant quelques lignes :

  • ajout de commentaire sur la ligne COPY local.conf /etc/fonts/local.conf je n'ai pas de fichier de conf donc forcément... Cela ne peut pas fonctionner
  • ajout de l'argument --no-sandbox ici : CMD [ "--user-data-dir=/data", "--no-sandbox" ]

Une fois ces modifications faite : sudo docker build -t chrome .

Puis je lance le container avec sudo docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix chrome et là, miracle de la technologie, j'ai mon chrome qui s'ouvre :
docker chrome

Voilà, une fois que j'aurais finaliser un peu plus les tests, je vous donnerais plus d'informations, mais c'est déjà prometteur !

Je vais regarder si cela peut fonctionner sous Windows car si c'est le cas, un problème monstrueux sera réglé !

A+
Tony B.