--- 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.

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.

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.
  • Hôte : marchine hébergeant un ou plusieurs containers
  • Tag : Identifiant d'une image. Généralement registre/sercice:version, par exemple docker.resel.fr/myresel:latext.

Mise en place

Hôte 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 avec quelques spécificités pour le ResEl :

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 réseau admin ou un autre réseau 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

Relancer le registre

Il arrive que le registre s'etteigne (pendant les mises à jour par exemple). Voici la procédure pour le relancer :

cd /srv/docker_registry/
docker-compose up -d 

Lancer un conteneur

Sur un hôte une image peut être récupérée sur le registre docker officiel

docker pull jwilder/nginx-proxy

Sinon vous pouvez récupérer les images sur le registre du ResEl :

docker pull docker.resel.fr/web:latest

Voire même ou compilé en local depuis un Dockerfile :

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

Créer une image

Utilisation du Registry Interne : mobydick

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

Guides

TODO

Ressources utiles

Articles liés

TODO

TODO (rédacteur)

  • TODO