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