Nov 05 , 2018
Docker et le principe de container

Docker ou l’outil qui a démocratisé l’utilisation de conteneurs, on en a tous entendu parler, mais concrètement qu’est-ce que c’est ?

Qu’est-ce qu’un conteneur ?

Afin de comprendre ce qu’est l’outil Docker, il faut d’abord savoir ce qu’est un container ou conteneur en français.
Imaginez une sorte de “boîte” dans laquelle on peut installer tout un environnement de travail telles que des applications et leurs librairies.
C’est en réalité une technique de virtualisation, cependant celle-ci est clairement différente de celle utilisée pour les machines virtuelles(VM).
En effet une machine virtuelle, comme son nom l’indique, n’est ni plus ni moins qu’une machine sans Hardware propre ( composants physiques d’un ordinateur).
La VM peut comprendre un OS ( système d’exploitation), avec toute son administration système (gestion des ports, périphériques, etc …), interface visuelle, ainsi que ses applications installées.

Container versus VM : une affaire de ressources.

Bon, si le conteneur est une boite et qu’il permet d’utiliser les mêmes applications qu’une machine virtuelle, pourquoi s’embêter ?
La grande bataille se joue sur la gestion des ressources : la VM est plus gourmande !
Et c’est là où le rôle du conteneur intervient. Cette simple “boîte d’exécution”, fonctionne avec l’OS hôte (Linux la majorité du temps) !
Elle est donc :

  • moins lourde
  • plus rapide à télécharger, installer, sauvegarder, restaurer ou même migrer
  • plus facile à partager

Un déploiement facilité par sa portabilité.

De ce fait, l’outil offre beaucoup plus d’aisance pour son déploiement.
Eh oui, le conteneur est indépendant des autres infrastructures, ce qui induit qu’il peut donc être déplacé n’importe où sans entraîner de problèmes de compatibilités.
Il peut être partagé entre tous les développeurs, et donc garantir un environnement de développement commun, extrêmement proche de celui de production tout en facilitant sa mise en place.
Il est alors possible de migrer une application de façon fluide de l’environnement de développement jusqu’à l’environnement de production.
Les déploiements sont également accélérés et facilités grâce à certains outils annexes.
Cerise sur le gâteau,  les administrateurs système n’ont plus besoin de gérer les versions des logiciels sur l’ensemble de leurs serveurs.

Docker permet de manipuler des conteneurs.

Tout d’abord, il faut savoir que Docker dispose de plusieurs outils.
Nous allons nous intéresser aujourd’hui en priorité à Docker Engine, l’exécuteur de conteneur de Docker.
Pour créer un container Docker il faut nécessairement se baser sur une image.
L’image contient tous les éléments permettant de faire fonctionner votre conteneur.
Si vous souhaitez créer un container Mysql 5.7, il faudra vous baser sur une image Mysql 5.7.
Les images sont disponibles sur le gestionnaire d’image officiel appelé DockerHub.
Il fonctionne de la même manière que apt-get, npm, yarn ou bien composer. Il en existe une infinité pour toute sorte de logiciel (ubuntu, apache, nginx, php, node, ruby, python, java, mysql, postgres, mongo, wordpress, prestashop, magento, etc.). Sachez que vous avez la possibilité de créer vos propres images en vous basant, ou non, sur des images existantes grâce aux Dockerfiles.

Créer un conteneur Docker.

$ docker run mysql:5.7

Votre conteneur aura son propre cycle de vie, vous pourrez l’arrêter et le relancer en conservant les données issues de vos manipulations. De base, les données sont conservées à l’intérieur du conteneur et ne sont pas accessibles depuis votre propre machine. Si vous supprimez votre conteneur, vous perdrez vos données à moins d’utiliser les volumes.
Les volumes sont des dossiers partagées entre le conteneur et l’hôte (votre ordinateur par exemple). Il apporte une persistance aux données du conteneur.
Dans le cas du conteneur Mysql 5.7, on choisi de partager le dossier “/var/lib/mysql”. Ainsi on garde en mémoire les fichiers des différentes bases de données créées dans le container.
Des paramètres de configurations de mysql peuvent être communiqués au conteneur grâce à des variables d’environnement au lancement de docker. On peut par exemple définir un mot de passe root spécifique grâce au paramètre -e de la ligne de commande suivante :

$ docker run –name mysql-numendo -e MYSQL_ROOT_PASSWORD=numendopassword -d mysql:5.7

Définir un volume.

Pour définir un volume, on utilise le paramètre -v :
$ docker run –name mysql-numendo -v /projets/numendo/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=numendopassword -d mysql:5.7

Ici, le répertoire de notre ordinateur (celui de l’hôte) situé dans /projets/numendo/mysql est partagé avec le répertoire /var/lib/mysql situé dans le conteneur que l’on vient de créer.
Ainsi, toutes les modifications apportées par le conteneur aux fichiers de ce volume, se répercutent dans notre dossier situé sur notre ordinateur, et inversement.
Cela apporte une persistance aux données de vos conteneurs même si ces derniers sont supprimés. Ces données peuvent être partagées à un tier, ce qui lui permettra de créer un container identique au vôtre à partir de la même image (mysql:5.7) qui sera récupérée via Docker-Hub.

À titre d’exemples, nous avons eu l’occasion d’utiliser Docker dans le cadre de l’intégration continue et du déploiement ;  d’un serveur local LAMP WordPress ; d’un serveur Gitlab,  ainsi qu’un serveur OpenStreetMap.
Et vous, avez-vous déjà utiliser Docker, si oui pour quelle utilisation ?

Ces explications abordent seulement la partie visible de l’iceberg, ou devrions-nous dire, du cargo …
Dans un prochain article, nous nous intéresserons à l’administration et l’orchestration des conteneurs Docker.
Cet article vous a plu, n’hésitez pas à consulter notre blog !
On aime découvrir les nouvelles technologies web, mais plus encore vous les partager !