Dire que Docker n’est pas de la virtualisation mais bel et bien de la conteneurisation, c’est facile. En même temps c’est vrai et ça permet de rentrer tout de suite dans le vif du sujet.
Le plus important à savoir est que grâce à docker, les développeurs utilisent tous les mêmes version logiciel : nginx, php 7, mySql, elastic Search, Rabbit MQ, etc entre eux, mais aussi ils sont conformes aux versions de prod.
En outre les versions qui sont identiques, le déploiement d’un projet en prod ou sur le poste d’un nouveau développeur symfony est nettement plus rapide (avec une préférence pour ubuntu si il y a un serveur elastic search).
Docker ou virtualisation
Voilà le schéma que tout le monde utilise pour expliquer la différence entre docker et virtualisation.
A retenir : Oui docker est plus léger car les conteneurs partagent le noyau du système d’exploitation de la machine hôte et ne nécessitent donc pas de système d’exploitation par application, ce qui augmente l’efficacité du serveur et réduit les coûts de serveur.
En ce moment tout le monde dockerise (porte ses projets sur docker) ses projets, mais qu’est-ce que ça veut dire exactement ?
Docker pour un projet php / mySQL
Le plus rapide pour dockeriser une application, dans un environnement de développement, est de s’appuyer sur des images officielles (trouvable sur le docker-hub). Dans notre exemple nous pouvons utiliser une image nginx/apache pour fournir un serveur web, une image mysql/mariadb pour fournir une base de données ainsi qu’une image php afin d’interpréter notre code php. Lors du lancement des containers, il est important de monter des volumes afin de permettre aux containers d’accéder aux fichiers de l’application. Afin de faciliter et automatiser ces différentes étapes lors de l’utilisation de plusieurs containers, il est préférable d’utiliser docker-compose.
Docker-compose est un outil permettant de définir et d’exécuter des applications Docker à conteneurs multiples. Avec cet utilitaire, vous utilisez un fichier YAML (docker-compose.yml) pour configurer les services de votre application. Ensuite, avec une seule commande, vous créez et démarrez tous les services de votre configuration
Conteneur ou container en anglais.
On parle bien de conteneurisation car au final, nous aurons un conteneur docker pour nginx dans la version que nous aurons choisi, un conteneur php en lien directe avec nginx et un conteneur docker pour la base de données.
Ces trois conteneurs sont et s’exécutent manière totalement autonome et indépendante les uns des autres
Comment se créent nos conteneurs ?
Voilà le rôle du DevOps chez IT-Room : La création et la gestion des conteneurs docker et plus particulièrement, leurs configurations.
Un conteneur se crée à partir d’une image qui provient d’un hub public ou privé tel que https://hub.docker.com : celui-ci étant public il va de soit.
Cette image récupérée sera configurée grâce au fichier docker-compose.yml et autres dockerfile. C’est principalement dans le docker-compose que seront précisés :
- le nom de l’image à utiliser,
- le nom du conteneur,
- les ports interne et exposé à utiliser,
- les volumes à rattacher,
- les dépendances (autres conteneurs)
- et autres éléments indispensables (login et mot de passe mySQL par exemple)
Le cycle de vie d’un conteneur
Un fois créés, les conteneurs s’exécutent, s’arrêtent se suppriment de manière très simple, les ligne de commande utilisées au quotidien par les développeur sont :
$ docker-compose up -d
Pour lancer les conteneur en mode deamon pour garder la main dans le terminal.
$ docker-compose stop
Pour les arrêter en fin de journée
Chez IT-Room, on partage ses connaissances sur Docker !