--- title: Docker au ResEl

Généralités

Docker est un logiciel libre permettant de gérer le déploiement de containers. Ceci permet d'isoler des processus au sein d'un système hôte Linux. L'impact sur la performance est minimal grâce à l'utilisation des control groups du noyau Linux.

Au ResEl nous nous servons de Docker pour quelques services, ce qui permet de les tester facilement et de les déployer facilement sur les différentes marchines.

Afin de faciliter la diffusion des images docker le ResEl possède un registre installé sur la machine (/Serveurs/Mobydick) accessible à l'adresse https://docker.resel.fr.

Motivations

Docker a commencé à être installé fin 2015 au ResEl pour notament isoler les services présents sur Pégase. Après une longue période vide, le service a été amélioré afin de simplifier les tests des services. D'abord pour le site ResEl ensuite pour d'autres services comme le LDAP.

Si aujourd'hui il n'est pour des raisons évidentes pas présent pour tous les services, l'harmonisation des services ResEl tend à lui donner une grande importance pour le déploiement.

Terminologie

Cette terminologie est nécessaire pour bien comprendre les principes, cependant je vous conseille de lire le glossaire officiel.

  • Conteneur : Ensemble de ressources (système de fichier, mémoire, réseau) associées à un ou des processus.
  • Image : Modèle d'un conteneur. Dans le cas de Docker, un système de fichier (/etc, /var, ...) compressé.
  • Dockerfile : Fichier décrivant comment construire une image de façon automatique.
  • Registre : Serveur (optionnel) contenant les images. docker.resel.fr chez nous.
  • Tag : Identifiant d'une image. Généralement registre/sercice:version, par exemple docker.resel.fr/myresel:latext.

Mise en place

Hote Docker

La mise en place d'un hote Docker sur n'importe quelle machine est très simple. La méthode recommandée est d'utiliser le playbook Ansible associé

Voici cepedant la méthode manuelle suivant la documentation officielle :

Installez les dépendances nécéssaires :

sudo apt-get install \
     apt-transport-https \
     ca-certificates \
     curl \
     software-properties-common

Ajoutez la clé GPG officielle :

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Vérifiez que l'id de la clé est correct : 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88

sudo apt-key fingerprint 0EBFCD88

Ajoutez le repo Docker :

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"

Mettez à jour l'index avec un apt update puis installez docker :

apt update && apt install docker-ce

warning Si vous-vous trouvez dans le VLAN admin ou un autre VLAN sans internet il faut configurer apt pour passer par le proxy apt. Créez le fichier /etc/apt/conf.d/01reselproxy-docker.j2 :

Acquire::http::proxy::apt.dockerproject.org "pegase.adm.resel.fr:3128";
Acquire::https::proxy::apt.dockerproject.org "pegase.adm.resel.fr:3128";
puis refaites apt update.

Vérifiez que Docker fonctionne correctement avec la commande suivante :

sudo docker run hello-world

Vous pouvez ensuite utiliser docker "normalement".

Pour utiliser le registre du ResEl (mobydick) vous devez faire un peu plus de configuration. En effet celui-ci n'est pas accessible au public et il faut donc s'y authentifier.

TODO : Comment s'auth au registre du ResEl

Registre Docker (mobydick)

TODO : installer un registre Docker au ResEl

Utilisation

Intérêt

Les utilisations de Docker sont multiples mais un des aspects le plus intéréssant pour le ResEl est la p... (??? La légende raconte qu'El touré voulait du Wi-Fi, ce qui a empêché cette malheureuse personne de finir sa phrase...)

Lancer un conteneur

Une image peut être récupérée sur un registre :

docker pull jwilder/nginx-proxy

Ou compilé en local depuis un Dockerfile :

git clone https://github.com/jwilder/nginx-proxy.git
docker build . --tag jwilder/nginx-proxy

Créer une image

TODO

Utilisation du Registry Interne : mobydick

Un registre docker interne au ResEl est disponible sur Mobydick. Il permet de partager les images docker du ResEl sans utiliser le registre publique (hub.docker.com), et sans devoir rebuilder depuis les sources (Dockerfile) à chaque fois.

Une fois qu’une image est testée/validée, elle peut-être pushé sur le registre. Par exemple si en local j’ai l’image :

$docker ps

 […]
 resel/sympa:6.2  97cd19850580

Alors il faut associer l’image au dépôt :

docker tag 97cd19850580 docker.resel.fr/sympa:6.2

Puis envoyer l’image :

docker push docker.resel.fr/sympa:6.2

Maintenant l’image peut-être récupérée sur les autres machines :

docker pull docker.resel.fr/sympa:6.2

NOTE : je crois que ceci est faux au 2016-12-10 : Il n’y a pas encore de certificat SSL sur le registre, il faut donc que les démons docker sur les clients aient été configurés avec l’option --insecure-registry. C’est le cas du template debian8 sur proxmox.

DOCKER_OPTS="--insecure-registry docker.resel.fr”

NOTE: ceci ne fonctionne pas... La liste des images (et pleins d’autres choses) peuvent-être obtenues via l’API rest :

$ curl docker.resel.fr/v2/_catalog
 {"repositories":["resel/sympa”]}

Guides

TODO

Ressources utiles

Articles liés

TODO

TODO (rédacteur)

  • TODO