Avez-vous entendu parler de Docker ? Probablement. Si non, ne vous inquiétez pas, je vais essayer de vous expliquer. Docker est probablement l’une des technologies les plus importantes du moment. Son potentiel révolutionne notre façon de construire, déployer et distribuer les applications. Les environnements de développement sont souvent compliqués, difficile de garder la cohérence entre les différents membres de l’équipe. Une solution possible est de construire des machines virtuelles préconfigurées disponible pour toute l’équipe. Docker peut sur ce point apporter des solutions en terme de rapidité et de légèreté par rapport aux VM.
Docker n’est pas une VM à proprement parler, c’est un container, il partage le noyaux Linux de la machine hôte et “isole” les processus qui sont exécutés à l’intérieur du container. Ce container Docker contient une application qui va être exécutée. Pas besoin de la couche Operating System complète comme dans une VM !
3 éléments essentiels forment les bases de la philosophie Docker :
Première bonne nouvelle, Docker est disponible pour la plus part des OS : Linux, Windows, Mac OS X pour les processeurs x86 et ARM (comme le Raspberry Pi). Le guide d’installation Docker est très bien fait. Pour Raspberry Pi, je vous conseille la distribution HypriotOS qui fonctionne très bien et sur laquelle je vais m’appuyer pour l’ensemble de mes explications.
Pour mon exemple, je vais mettre en oeuvre un serveur de cache DNS, utilisant bind9 sur un Raspberry PI B, mais le fonctionnement est le même sur une architecture Intel.
Comment réaliser une Docker Image : la réponse est simple, il faut écrire un fichier qui porte le nom Dockerfile (et pas un autre nom), qui ressemble au fichier ci-dessous :
FROM resin/rpi-raspbian:jessie
MAINTAINER Vincent RABAH <vincent.rabah@gmail.com>
RUN apt-get update && \
apt-get -y dist-upgrade && \
DEBIAN_FRONTEND=noninteractive apt-get -y install bind9 --no-install-recommends && \
cat /etc/bind/named.conf.options | sed 's/dnssec-validation auto;/dnssec-validation auto; allow-query { 0.0.0.0\/0; }; allow-recursion { 0.0.0.0\/0; };/' >/tmp/bind.options && cat /tmp/bind.options >/etc/bind/named.conf.options && \
apt-get clean -y && \
apt-get autoclean -y && \
apt-get autoremove -y && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
EXPOSE 53
EXPOSE 53/udp
CMD ["/usr/sbin/named", "-c", "/etc/bind/named.conf", "-f"]
Pour lancer la création de notre première Docker Image qui va s’appeler itwars/rpi-bind, nous allons exécuter la commande suivante :
docker build -t itwars/rpi-bind .
Vous allez alors constater que Docker va télécharger un ensemble de fichiers, qui sont les fameux layers dont j’ai parlé précédemment. Quand cette commande Docker est achevée, exécutez la commande suivante :
docker images
Vous allez voir votre Image Docker créée :
Maintenant, nous allons exécuter notre premier container Docker :
docker run --name bind -d -p 53:53 -p 53:53/udp itwars/rpi-bind
Le container a pour nom bind, je “mappe” les ports du container avec ceux de la machine hôte et ce container utilise l’Image Docker itwars/rpi-bind.
Pour voir la liste des containers Docker en cours d’exécution, utiliser la commande :
docker ps
Maintenant, pour vérifier que notre serveur de cache DNS fonctionne, il suffit d’indiquer à la machine hôte Docker le nouveau serveur de DNS, dans le fichier /etc/resolv.conf en remplaçant la configuration actuelle par :
nameserver 127.0.0.1
Exécutez la commande suivante pour voir si votre serveur DNS dans le container Docker répond :
host google.fr
Vous devriez avoir une réponse comme celle-ci si tout fonctionne bien :
google.fr has address 216.58.208.227
google.fr has IPv6 address 2a00:1450:4007:80e::2003
google.fr mail is handled by 50 alt4.aspmx.l.google.com.
google.fr mail is handled by 30 alt2.aspmx.l.google.com.
google.fr mail is handled by 10 aspmx.l.google.com.
google.fr mail is handled by 40 alt3.aspmx.l.google.com.
google.fr mail is handled by 20 alt1.aspmx.l.google.com.
Pour stopper l’exécution du container Docker :
docker stop bind
Pour redémarrer un container Docker :
docker start bind
Pour voir tous les containers Docker, y compris ceux qui sont stoppés :
docker ps -a
On constate rapidement, que le démarrage, l’arrêt d’un container Docker sont instantanés ! Par rapport aux VM il n’y a pas photo … Second avantage, quand vous publiez vos images Docker sur le Docker Hub, pour pourrez installer votre image et en créer un container sur d’autre machine facilement.
Ce tutorial est le premier d’une longue série, car c’est un sujet génial qui me passionne !