Retrouvez-nous le 14 mai au Google Cloud Summit à l'Accor Arena - Paris !

logo saagie red
illustration blog premier pas docker

Comment faire vos premiers pas avec Docker ?

Docker et la conteneurisation est l’un des sujets en tendance dans le développement de logiciels et la data science. Comprendre les concepts sous-jacents à cette technologie est aussi important que de savoir lire et écrire. Après une brève introduction sur les raisons pour lesquelles vous devriez l’utiliser, nous allons explorer sa terminologie, comme Dockerfile, Docker image et Docker container.

Qu'est-ce que Docker ?

Un ensemble combiné de produits Saas (Software as a service) et Paas (Platform as a service) utilisant la virtualisation au niveau du système d'exploitation pour développer et fournir des logiciels dans des paquets appelés conteneurs

Wow, on commence fort n’est-ce pas ? En termes plus simples, Docker est une plate-forme permettant de développer, de déployer et d’exécuter des applications à l’intérieur de conteneurs. Il permet aux utilisateurs (développeurs de logiciels ou data scientists) d’emballer une application avec toutes ses dépendances dans des unités standardisées (conteneurs).

Alors c'est une sorte de machine virtuelle (VM) ?

C’est l’une des questions les plus posées à propos de Docker. La réponse est : non.

Les conteneurs et les machines virtuelles présentent des avantages similaires en matière d'isolation et d'allocation des ressources, mais fonctionnent différemment car les conteneurs virtualisent le système d'exploitation au lieu du matériel.

Les conteneurs sont une abstraction de la couche applicative qui regroupe le code et les dépendances.

Docker ne partagera que les ressources de la machine hôte pour faire fonctionner ses environnements.

Les machines virtuelles sont une abstraction du matériel physique qui transforme un serveur en plusieurs serveurs.

Contrairement à Docker, une machine virtuelle comprendra un système d’exploitation complet. Elle fonctionnera de manière indépendante et agira comme un ordinateur.

La terminologie Docker

Avant de créer votre première application Docker, il est utile de vous familiariser avec sa terminologie.

Dockerfile

Un Dockerfile est une recette pour créer une image avec la syntaxe spéciale du Docker.

D’après la documentation offcielle : « un Dockerfile est un document texte qui contient toutes les commandes que vous exécuteriez normalement manuellement pour construire une image Docker ».

Le Dockerfile contient les instructions nécessaires pour définir le bon environnement de déploiement de votre application. Par exemple, un Dockerfile pour une application de machine learning pourrait indiquer à Docker d’ajouter NumPy, Pandas et Scikit-learn dans une couche intermédiaire. La première étape à suivre lorsque vous créez un Dockerfile est d’accéder au site web DockerHub. Il contient de nombreuses images pré-conçues qui vous aideront à gagner du temps.

Docker image

Une fois que votre code est prêt avec votre application, et que le Dockerfile est écrit, tout ce que vous avez à faire est de créer votre image pour contenir votre application.

« Une image contient le Dockerfile, les bibliothèques et le code dont votre application a besoin pour fonctionner, le tout regroupé ».

 Pour obtenir une nouvelle Docker image, vous pouvez soit l’obtenir à partir d’un registre (tel que le DockerHub), soit créer la vôtre. Il existe des dizaines de milliers d’images disponibles sur DockerHub. Vous pouvez également rechercher des images directement à partir de la ligne de commande en utilisant la recherche de Docker. Une distinction importante à prendre en compte lorsqu’il s’agit d’images est la différence entre les images de base et les images enfants :

Les images de base sont des images qui n’ont pas d’image parente, généralement des images avec un système d’exploitation comme Ubuntu, Python ou Debian. Les images enfants sont des images qui s’appuient sur les images de base et y ajoutent des fonctionnalités supplémentaires.

Il y a ensuite les images officielles et les images utilisateur, qui peuvent être à la fois des images de base et des images enfants. Les images officielles sont des images qui sont officiellement maintenues et soutenues par l’entreprise. Elles ne comportent généralement qu’un seul mot. Par exemple, les images Python, Ubuntu et Hello-world sont des images officielles.
Les images utilisateurs sont des images créées et partagées par les utilisateurs. Elles s’appuient sur les images de base et ajoutent des fonctionnalités supplémentaires. Une fois l’image créée, votre code est prêt à être lancé.

Docker container

Un conteneur Docker est une image Docker qui prend vie.

Un conteneur contient :

  • Une image de Docker ;
  • Un environnement d’exécution ;
  • Un ensemble standard d’instructions.

L’exécution d’une image Docker avec une commande dédiée créera et démarrera un conteneur à partir de cette image.

Docker Hub

Docker Hub est un registre d’images Docker.

Vous pouvez considérer le registre comme un répertoire de toutes les images disponibles. Si nécessaire, on peut héberger ses propres registres et les utiliser pour extraire des images.

Comment cela fonctionne t-il étape par étape ?

1 – Tout d’abord, vous pouvez télécharger et installer gratuitement Docker Community Edition

2 – Ensuite, vous créez votre première image Docker en écrivant puis en construisant un fichier Docker. 

Astuce : vous pouvez copier un Dockerfile existant ou vous inspirer des différents exemples disponibles sur DockerHub et créer le vôtre. Un Dockerfile définit l’image.

3 – Ensuite, vous créez et exécutez un conteneur à partir de votre image Docker.

Voilà, votre conteneur devrait être opérationnel !

Et la suite ?

Nous n’avons fait qu’effleurer la surface de Docker, et il y a encore tant de choses à apprendre. Nous vous recommandons de lire le tutoriel officiel sur le site web de Docker pour aller plus loin. Le tutoriel vous expliquera comment créer et exécuter votre première application Docker en peu de temps ! C’est incroyablement simple ; il faut vraiment le faire pour le croire ! 

Docker est l’un des outils qu’un software engineer ou un data scientist doivent avoir dans leur portefeuille de compétences, à l’instar de Git pour versionner votre application.