Initiation à Docker

Zakariae EL ALAOUI
6 min readJul 4, 2019

--

Je suis très content de partager avec vous le potentiel que Docker offre aux développeurs des applications et plus particulièrement des applications WEB.

Quand on commence avec une nouvelle technologie on souhaite savoir quels sont les bénéfices et innovations que l’on peut en tirer.

Afin de répondre à cette question je commencerai par expliquer l’analogie Docker ensuite je déroulerai de manière très synthétique le schéma Docker avant de vous renvoyer vers un toolkit qui vous permettra d’utiliser Docker au quotidien.

Pourquoi Docker ?

Il s’agit de l’analogie des containers sur des porte-conteneurs. On peut imaginer que le code est rangé dans un container et celui ci est envoyé par bateau dans son environnement à savoir votre environnement développement/homologation/staging/production. On gagne en rapidité, fluidité, productivité étant donné que les taches sont exécutées de façon automatiques et homogène. Si on reprend l’image du container on peut le déplacer le supprimer sans pour autant arrêter le bateau.

Docker apporte de nombreux avantages qu’on peut schématiser en quatre grands pôles :

1. Les Equipes : Accélere l’intégration des développeurs,

2. Les Applications : Elimine les conflits entre applications,

3. Les Environnements: Création d’environnement ISO (Prod, PreProd, Dév) et cohérent,

4. Les Performances: Offre une navigation plus rapide et sécurisée,

C’est quoi Docker Exactement ?

Docker est une plateforme légère, open source, sécurisée qui permet de simplifier la création, le démarrage, l’arrêt et la navigation dans les applications.

Docker démarre nativement sous linux et Windows server 2016 et grâce à une machine virtuelle pour Window et Mac OS.

Le système Docker repose sur des images et des containers.

Ce qui nous amène à définir ce que c’est une image et ce que c’est un container dans l’écosystème Docker

Intéressons-nous à l’image Docker:

L’image Docker peut être apparenté à un template, constitué d’un ensemble de lignes de commandes accessible en lecture et exécutable permettant de construire un container. L’image Docker est un atout pour exécuter un logiciel ou une application car elle est constituée du code, des variables d’environnement, des fichiers de configuration.

Un container est :

  • Une instance d’une image (Ce que l’image devient en mémoire lorsqu’elle est installée)
  • Certains fichiers et ports dans le Host peuvent êtres partagés avec le container uniquement si c’est explicitement indiqué lors de l’exécution des images
  • Les containers peuvent être démarrés, arrêtés et supprimés d’une façon très rapide et sécurisée
  • Il est possible de procéder à des modifications au niveau du container en cours d’exécution.

Pourquoi favoriser l’utilisation de Docker et non pas une Machine virtuelle ?

Une machine virtuelle nécessite de nombreuses étapes et a l’inconvénient du stockage physique :

  • Besoin d’un système Host d’exploitation
  • Pour démarrer un OS invité il faut un Hyperviseur (permet d’installer un ou plusieurs machine virtuelles)
  • Est une abstraction du matériel physique
  • Avec une machine virtuelle l’allocation de la RAM et du stockage se fait physiquement.

Alors que Container Docker est un outil simple et optimum en terme d’opération et de stockage :

  • Docker a uniquement besoin d’un Système Host
  • Toutes les ressources sont partagées nativement avec le Host
  • Pour supprimer une application il suffit de supprimer son container

C’est pourquoi Docker est plus rapide, plus efficace et fiable et vous permettra d’optimiser vos projets et gagner en productivité.

Pour résumer vous trouverez ci-dessous un schéma récapitulatif.

Docker au quotidien

Pour commencer a utiliser docker facilement je vous invite à installer Docker Toolbox (Vous pouvez utiliser aussi Docker for windows ou Docker for mac) qui est un outil pour Windows et Mac OS ce dernier regroupe :

  • Docker client
  • Docker Machine
  • Docker Compose
  • Docker Kitematic
  • VirtuelBox

Dans cet article nous allons faire un focus sur Docker client :

  • Docker client (pour l’analogie, on peut imaginer qu’il s’agit des personnes qui chargent les containers sur bateau) interagi avec docker Engine (ici il faut imaginer la grue qui dépose les containers sur le bateau ou l’inverse décharge le bateau) (démon Unix).
  • Créer et gérer les images
  • Démarrer et gérer les containers (arrêter, inspecter, supprimer).

Plusieurs commandes permettent de débuter avec docker :

  • Docker pull [Nom de l’image] permet de télécharger une image (php, notejs, ASP.NET ….)
  • Docker run [Nom de l’image] permet de créer le container
  • Docker image liste les images disponibles
  • Docker ps liste les containers en cours
  • Docker ps –a permet de lister tous les containers en cours et arrêtés
  • Docker rm [id du container] supprime un container

Exemple d’utilisation :

L’exécution de la commande docker pull hello-world permet de télécharger l’image hello-world

L’exécution de la commande docker images permet d’avoir une visualisation rapide des différentes images déjà disponibles sur notre machine :

  • Le nom de l’image
  • Le Tag : Version de l’image
  • L’identifiant unique de l’image
  • Sa date de création
  • La taille qu’occupe l’image sur le disque

Les images disponibles ne sont pas automatiquement utilisées du fait qu’il faut dire a docker explicitement de démarrer le container de l’image en question :

Docker run hello-world => si vous voyez les informations suivantes cela veut dire que l’exécution s’est effectuée correctement

Si on exécute la commande docker ps il n’y a rien qui s’affiche (cela est du au fait que docker ps affiche que les containers en cours), pour visualiser tous les containers il suffit d’ajouter l’option –a

Au lieu de laisser le container à l’arrêt qui ne sera peut-être plus jamais réutilisé, il faut le supprimer grâce à la commande docker rm (l’identifiant du container ou son nom).

Il est possible de procéder de la même manier pour supprimer les images grâce à la commande

docker rmi (l’identifiant de l’image ou son nom)

Je vous propose la maintenant d’exécuter ngnix avec docker :

Première chose il faut télécharger l’image avec docker client (docker pull kitematic/hello-world-nginx)

Pour vérifier que l’image est bien disponible il faut exécuter la commande (docker images)

On démarre cette image grâce à la commande docker run –p 80 :80 kitematic/hello-world-nginx cette image va démarrer un container en exposant le port 80 dans le Host et le port 80 sur le container

Conclusion :

Docker est une technologie très puissante pour la mise en place d’un environnement de développement et l’harmonisation de tous les environnements.

Docker permet une plus grande réactivité des équipes de développement pour l’intégration de nouveaux membres et/ou la mise en place de nouveaux outils.

En somme, docker est la solution qui vous fera gagner en agilité, en portabilité et en productivité.

--

--