Introduction à Docker
Au travers de cette série d’articles je vais essayer de partager toutes les infos que j’ai accumulées en essayant d’apprendre à utiliser Docker.
Petit disclaimer cela dit : je ne suis pas du tout un expert en la matière et suis (certainement comme vous) sur le chemin de l’apprentissage. N’hésitez pas à croiser mes infos avec d’autres lectures et à me contredire si je me trompe dans mes explications.
Ceci est publié dans une démarche de partage, de vulgarisation pour rendre Docker plus accessible aux débutants et leur éviter la galère que j’ai vécu
Pourquoi j’ai commencé à utiliser Docker
Depuis que j’ai commencé à m’intéresser au fonctionnement des serveurs Linux et à la gestion de serveur dédié pour héberger ses sites ou ses applications, j’ai toujours vu Docker évoqué à un moment ou un autre.
Voici quelques raisons qui m’ont convaincu de m’y intéresser :
- gain de temps : le temps d’apprentissage de Docker est un investissement. Une fois les bases maitrisées je voulais gagner du temps sur le déploiement, la sauvegarde, et la mise à jour de mes différents éléments hébergés sur mon serveur
- éviter les différences local/serveur : jusqu’à maintenant je n’étais pas très satisfait de ma manière de travailler en local car je me trouvais souvent face au problème très courant d’avoir des différences entre les versions sur mon serveur et en local (PHP, Mysql, etc…).
- déploiement facilité : plutôt que de devoir se préoccuper d’ajouter les dépendances nécessaires et configurer tout un environnement propre à chaque projet, je voulais rendre cela plus facile pour pouvoir me concentrer sur le plus important, à savoir mettre en place mon serveur et bosser sur des projets plus que sur de la config.
- un serveur / local moins pollué : certains crieraient au scandale mais je n’utilisais pas de machine virtuel ou aucun autre système pour contenir mes applications. Dans mes premiers pas sur le chemin de la gestion de serveur, ce dernier était rempli de residus de tests, d’applications anciennements installés etc…
Docker permet de pallier à tous ces problèmes. Pour une grande majorité des besoins de bases des utilisateurs ont déjà produit de la documentation et des ressources pour installer un site ou une application sur votre système (local ou distant) en très peu de temps.
Glossaire : quelques concepts
Conteneur (container): Docker lance vos applications dans des “boites” séparées ce qui permet ce que je mentionnais plus haut et rend le tout plus sécurisés car les conteneurs sont indépendants les uns des autres. Dans le cas d’un site Wordpress par exemple vous aurez souvent plusieurs conteneurs : un conteneur pour le serveur web avec Wordpress, un conteneur avec le système de base de données (Mysql), un conteneur avec PHPmyadmin si vous en avez besoin.
Image : les conteneurs sont lancés à partir d’images. Une image est le “modèle” selon lequel est construit un conteneur. L’avantage de ce système est qu’il vous permettra d’avoir exactement la même chose où que vous déployiez votre conteneur. Docker vous permet d’utiliser une image existante et il en existe des tas. Vraiment DES TAS. Pour continuer sur mon exemple de Wordpress le système d’image vous permet d’utiliser une image dans la forme que vous voulez : vous voulez un Wordpress qui tourne sous Apache et avec PHP7.1 ? Déployez un conteneur à partir de l’image wordpress:php7.0-apache. Mais Docker vous permet d’en créer vous-même : c’est à dire créer une configuration avec les logiciels dont vous avez besoin ; je n’ai pas encore essayé. Cela permet par exemple de créer une image d’une version ancienne de Wordpress et une ancienne version de PHP pour répliquer la configuration du site d’un client par exemple.
Volume : le concept de volume dans Docker est assez vaste. Pour ma part pour le moment je n’ai eu besoin pour commencer que d’apprendre qu’ils servaient à sauvegarder des données hors d’un conteneur. En effet un conteneur peut être stoppé voire supprimé puis recréé sans aucune difficulté. Toutefois tout changement effectué dans ce conteneur sera perdu dans cette opération. Docker pallie donc à cela en permettant de choisir des dossiers ou des fichiers qui seront stocké quelque part sur votre ordinateur (ou votre serveur). Exemple : avec un conteneur Wordpress vous pouvez créer un volume correspondant au dossier /wp-content. Tout conteneur Wordpress recréé utilisant ce volume pourra alors utiliser le dossier wp-content et son contenu.
Si ce concept est un peu flou nous je l’éclaircis dans le prochain article avec un exemple concret.
Réseau (network) : tout comme le concept de volume, les réseaux dans Docker ont pleins d’utilisations. Il est bien de comprendre une chose pour démarrer : un réseau vous permet de faire communiquer plusieurs conteneurs et d’en isoler certains si besoin. Par exemple si votre exemple contient deux sites (un conteneur wordpress et un conteneur mysql chacun) vous pourrez placer chacun des sites sous la forme de leurs deux conteneurs dans des réseaux différents. L’utilisation de base de ce concept est de connecter un conteneur serveur web à un conteneur qui a le rôle de base de données.
docker-compose : docker-compose est une commande et un outil qui permet de créer des fichiers de configuration au format .yml (par défaut nommé docker-compose.yml) contenant une série d’informations pour créer un ou des conteneurs : l’image d’origine, les volumes qu’il doit utiliser, le réseau sur lequel ils se trouvent etc…
Personnellement j’ai appris à utiliser Docker via le fichier docker-compose : cela permet d’éviter d’avoir à mémoriser un tas de lignes de commandes. Une simple commande et un fichier bien renseigné et vous pouvez lancer n’importe quel conteneur.
Dockerfile : un Dockerfile est un fichier simplement intitulé ‘Dockerfile’ (sans extension) qui contient une série d’instruction qui pourront être lancée au démarrage du conteneur. Je donnerai très bientôt un exemple.