Docker est une technologie de conteneurs qui permet de faire tourner vos logiciels dans un environnement isolé du reste de la machine. C’est comme les machines virtuelles mais en beaucoup plus léger : Il n’y a pas de temps d’attente lorsque vous lancez un nouveau conteneur.
Les principaux avantages à travailler avec des conteneurs
- D’avoir un environnement identique entre les différents développeurs et éventuellement sur les serveurs de production.
- D’intégrer rapidement un nouveau membre dans une équipe de dev sans qu’il perde 3 jours à configurer correctement sa machine.
- De pouvoir tester de nouvelles technos en les installant dans un environnement isolé et donc sans « polluer » votre machine de travail.
Premier exemple avec Docker
Vous devez au préalable installer Docker sur votre machine selon votre système d’exploitation :
- MacOS : https://docs.docker.com/docker-for-mac/install/
- Windows : https://docs.docker.com/docker-for-windows/install/
- Autres : https://docs.docker.com/engine/installation/
Ouvrez un terminal. Si vous êtes sur environnement Linux vous devrez certainement ajouter sudo devant les commandes qui suivent. Nous allons lancer un conteneur basé sur une image d’Ubuntu et exécuter une commande Shell à l’intérieur de celui-ci. A la fin de l’exécution le conteneur s’arrête automatiquement.
docker run --rm ubuntu echo "Bonjour les Human Coders !"
Cela peut-être long la première fois puisqu’il faut télécharger l’image d’Ubuntu en local. La fois suivante c’est très rapide.
Démarrer une session interactive
Vous pouvez démarrer une session interactive pour travailler comme si vous étiez sur une nouvelle machine :
docker run --name humancoders -p 8080:80 -i -t ubuntu:17.04 /bin/bash
Cette commande permet de lancer un nouveau conteneur basé sur Ubuntu. Vous noterez la redirection de port pour pouvoir afficher les pages web du conteneur dans la navigateur de la machine hôte (Il se peut que votre port 80 soit déjà occupé par un autre serveur). On a aussi précisé la version d’Ubuntu souhaitée.
Vous êtes maintenant dans le conteneur et vous pouvez exécutez les commandes habituelles :
apt-get update apt-get install --assume-yes apache2 /etc/init.d/apache2 start echo '<h1>Bonjour Human Coders !</h1>' > /var/www/html/index.html
Affichez dans votre navigateur la page suivante : http://localhost:8080/index.html
Exécution en background
Dans l’exemple précédent, dès que vous fermez votre session dans le conteneur (CTRL-D) celui-ci s’arrête. La commande suivante permet de lister tous les conteneurs y compris ceux qui sont arrêtés :
docker ps --all
Vous pouvez le relancer le conteneur en arrière plan avec la commande :
docker start humancoders
Puis pour basculer à nouveau dans le conteneur tapez :
docker attach humancoders
L’arrêt du conteneur a forcément provoqué l’arrêt des processus. Donc vous devez démarrer à nouveau Apache pour pouvoir afficher notre page HTML.
Création d’une image avec un Dockerfile
Dockerfile est un fichier de configuration spécifique pour Docker. Il vous permet de décrire comment vous allez construire l’image qui servira à initialiser votre conteneur. C’est le format standard à utiliser pour travailler de manière collaborative avec des images Docker. Nous allons voir un exemple simple pour afficher une page web.
Créez votre répertoire de travail : humancoders
Dans celui-ci, créez un fichier ‘index.html’ contenant :
<h1>Bonjour les Human Coders !</h1>
Créez un fichier: ‘Dockerfile’ contenant :
FROM nginx:1.9.12 COPY index.html /usr/share/nginx/html/ EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
Dans ce fichier nous indiquons vouloir utiliser une image officielle prête à l’emploi pour faire tourner le serveur web nginx. Plus d’infos ici : https://hub.docker.com/r/library/nginx/
Notre page web sera copiée à l’intérieur du conteneur et nous ouvrons le port 80.
Enfin nous démarrons le serveur nginx.
On construit l’image Docker de cette manière :
docker build -t humancoders .
Enfin nous démarrons le conteneur avec le port 80 du conteneur qui est redirigé vers le port 8080 de notre machine locale :
docker run --rm -p 8080:80 humancoders
Affichez dans votre navigateur la page suivante : http://localhost:8080/index.html
En production ?
Je n’ai pas encore testé l’utilisation de Docker pour des mises en production. Sachant que les bonnes pratiques sont d’avoir un conteneur différent pour chaque processus : serveur web, base de données, etc.
Il vaut mieux donc utiliser un outil d’orchestration comme Docker Swarm ou Kubernetes.
Cela pourra être traité dans un autre article…
D’ailleurs pour ceux qui veulent approfondir, il existe une formation chez Human Coders : https://www.humancoders.com/formations/docker
Et vous ? Quelle est votre expérience avec Docker ?