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