Installer et configurer docker sur archlinux

Installation de Docker

On installe d’abord Docker :

Ou la version de développement :

Il faut ensuite démarrer et activer le service docker :

On vérifie ensuite que docker tourne :

Si on veut manipuler docker comme un utilisateur normal (pas root), on doit ajouter l’utilisateur en question au groupe docker :

Il faut se “dé-loguer” et se “re-loguer” pour que les changements soient pris en compte.

Configuration de Docker

Driver de stockage

Le driver de stockage, également appelé pilote graphique, a un impact énorme sur les performances. Son travail est de stocker des couches d’images conteneur efficacement, c’est-à-dire lorsque plusieurs images partagent un calque, un seul calque utilise l’espace disque. L’option par défaut, la plus compatible, “devicemapper” offre des performances sous-optimales, ce qui est absolument terrible sur la rotation des disques durs. De plus, “devicemappper” n’est pas recommandé en production.
Comme Arch Linux lance de nouveaux noyaux, il est inutile d’utiliser l’option de compatibilité. Un bon choix moderne est overlay2.
Pour voir le pilote de stockage en cours, exécutez : # docker info | head.
Pour définir votre propre choix de pilote de stockage, créez un Drop-in snippet et utilisez l’option -s pour dockerd :

Attention : à chaque création et/ou modification de fichier dans /etc/systemd/system/, il convient de recharger le démon systemd, puis de relancer le service :

Localisation des images

Par défaut, les images docker sont localisées dans /var/lib/docker. Elles peuvent être déplacées sur une autre partition. Pour se faire, on arrête d’abord le service docker systemctl stop docker. Si des images existent sous /var/lib/docker, on s’assure que ces images sont totalement démontées. Une fois que c’est fait, on les déplace vers une autre destination (par exemple, /home/docker) et on modifie le fichier /etc/systemd/system/docker.service.d/override.conf comme ceci :

Utilisation

Images

La commande suivante construit une image debian.

On lance ensuite l’image avec :

Supprimer toutes les images et conteneurs

Problème : on joue avec docker et les conteneurs et images s’accumulent. Elles finissent par prendre pas mal de place et on ne s’y retrouve plus.

Attention : ce qui suit va détruire TOUS les conteneurs et TOUTES les images présentes. Il sera impossible de les restaurer !

Cas pratique : Logiciel graphique avec docker, XIA

Xia est une application graphique qui, couplé à Inkscape ou LibreOffice Draw, permet de réaliser simplement des images interactives (avec détails zoomables) et des jeux sérieux en html5.

Problème : Il n’existe pas de paquet xia pour archlinux et je n’ai jamais réussi à l’installer sous ma distribution favorite. On va donc créer une image Ubuntu intégrant xia. On va pouvoir comme cela utiliser Xia sur une image Docker de Ubuntu.

Merci à http://www.rpresle.totoandco.eu/logiciel-graphique-avec-docker-haroopad/

Le Dockerfile

Pour simplifier la création des conteneurs il est possible d’utiliser des images mis à disposition sur DockerHub, le site officiel de Docker. Il est également possible de créer des Dockerfile qui décrivent un certain nombre d’instructions permettant le paramétrage du conteneur. Ces Dockerfile définissent à partir de quel système on souhaite travailler et donc définit le système de fichiers et les programme présents dans le conteneur.

Voici le Dockerfile permettant d’utiliser XIA (j’y ai ajouté inkscape au passage)

Ce Dockerfile permet la création d’une image à l’aide de la commande docker build.

Création de l’image

On lance la commande suivante pour créer notre image docker :

Cette commande va lancer toutes les instructions qui suivent les “RUN” du fichier Docker_Xia. La dernière ligne indique l’application à lancer par défaut au lancement du conteneur.

Utilisation de l’image Xia

Pour utiliser l’image, on crée un petit fichier bash, xia.sh :

La première ligne indique au système d’autoriser l’accès du conteneur sur le serveur X.

On lance ensuite le conteneur (docker run). La deuxième ligne permet de rediriger le flux graphique et de le confier au serveur graphique de notre machine. Le -v $HOME/temp:/root permet de partager un répertoire (/home/user/temp ici) avec le conteneur. Le répertoire /root du conteneur (Ubuntu) correspondra au répertoire temp du système hôte situé dans le répertoire personnel.

Il faut évidemment rendre le fichier exécutable :

Et on le lance :

Cela a pour effet de lancer Xia.

On peut aussi lancer Inkscape (et sans doute d’autres applications installées dans l’image ubuntu) en faisant (c’est la raison du $1 en fin de ligne):

Mise à jour : Le lancement via docker run... crée un nouveau conteneur à chaque fois qu’on lance xia.sh. Ce n’est pas utile et on peut gagner en rapidité et en espace disque en testant l’existence d’un conteneur déjà créé. Pour cela, on modifie le fichier xia.sh comme suit :

On aurait pu ajouter l’option -rm à docker run qui signifie de détruire automatiquement le conteneur quand on quitte. Voir : https://docs.docker.com/engine/reference/commandline/run/

Pour résumer

  1. On crée une image sous Inkscape et on la rend interactive.
  2. On copie cette image dans le répertoire choisi plus haut (ici temp)
  3. On lance le conteneur Xia (via xia.sh) et on convertit cette image et on l’exporte dans le même répertoire.
  4. On lance le fichier index.html créé par Xia dans un navigateur pour voir notre image interactive au format html5.