Le père noël est passé en retard
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 :
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 !!
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
:
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 :
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 :
Le résultat est bluffant, l'application rqt se lance :
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é :
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 :
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.