Faites-vous une idée du conteneur Docker.
Dans l’espace technologique actuel, la phrase “ça marche sur mon système” est très souvent utilisée par les développeurs. Mais il arrive souvent que l’application fonctionnant sur le système d’un développeur ne fonctionne pas sur la machine d’un testeur ou sur une machine de production, ce qui conduit au chaos.
Docker a été introduit pour résoudre de tels problèmes. 💯
Pourquoi Docker ?
Laissez-moi vous raconter mon expérience personnelle sur les raisons pour lesquelles Docker est si essentiel.
Je travaillais sur un projet full-stack avec mon équipe, où je devais créer une application qui utilisait Angular dans le frontend, Node.js dans le backend, et MySQL comme base de données. Nous nous sommes heurtés à plusieurs problèmes en travaillant sur cette application utilisant plusieurs technologies.
- Le premier problème était la compatibilité du système d’exploitation. Comme j’utilisais plusieurs technologies, je devais m’assurer qu’elles étaient toutes compatibles avec le système d’exploitation que j’utilisais. Dans certains cas, la version d’Angular ne fonctionnait pas avec la version du système d’exploitation que j’utilisais, et j’ai donc dû changer la version du système d’exploitation plusieurs fois.
- Comme l’architecture de l’application que je construisais a changé au fil du temps, je me suis retrouvé dans des situations où les versions et les dépendances des logiciels et des bibliothèques devaient être mises à jour. J’ai été confronté à de nombreux problèmes de compatibilité avant de parvenir à une version stable de toutes les technologies que j’utilisais pour mon application. La mise à jour d’un seul outil utilisé dans mon application était une entreprise risquée.
- Plus tard, d’autres développeurs ont travaillé sur mon application. Comme la pile technologique était lourde, ils ont dû exécuter de nombreuses commandes pendant des heures pour configurer leur environnement, qui était compatible avec l’application. Je devais vérifier et évaluer l’environnement de chaque développeur pour m’assurer qu’il n’y avait pas de décalage avec la version technologique que j’utilisais.
- Enfin, si l’un des développeurs n’était pas à l’aise avec le système d’exploitation que j’utilisais pour créer mon application, il lui était difficile de travailler sur l’application.
Tout cela rendait difficile le développement, la construction et la livraison de l’application dans les délais impartis. C’est là que Docker est entré en scène. Il résout tous les problèmes que je viens de mentionner.
Qu’est-ce que Docker ?
Docker est une plateforme de conteneurisation qui regroupe l’application et ses dépendances à l’intérieur d’un conteneur afin que l’application fonctionne de manière transparente dans n’importe quel environnement, qu’il s’agisse d’un environnement de développement, d’un environnement de mise en scène ou d’un environnement de production.
Il s’agit d’un outil conçu pour faciliter la création, le déploiement et l’exécution d’applications à l’aide de conteneurs. Les conteneurs Docker sont des alternatives légères aux machines virtuelles et utilisent le système d’exploitation hôte. Il n’est pas nécessaire de pré-allouer de la mémoire vive dans les conteneurs, comme c’est le cas pour les machines virtuelles.
Il s’agit d’une plateforme open-source destinée aux développeurs, aux administrateurs système et aux entreprises, qui leur permet de créer, d’expédier et d’exécuter des applications distribuées à la volée.
Pour en savoir plus sur le fonctionnement interne de Docker, consultez l’architecture Docker.
Images Docker, conteneurs, Dockerfile
Image Docker
L’image Docker est un modèle nécessaire à l’exécution d’une application. Elle se compose du code de l’application, de bibliothèques, d’outils, de dépendances, etc.
Les images Docker sont des fichiers immuables en lecture seule, parfois également appelés snapshots. Vous ne démarrez ni n’exécutez une image Docker ; vous construisez un conteneur à partir de celle-ci. Lorsqu’un conteneur est créé à partir d’une image Docker, il crée une couche de conteneur au-dessus de la couche d’image.
Il doit y avoir une image Docker de base qui est utilisée pour créer plusieurs autres images Docker avec quelques modifications de l’image de base.
Docker Hub est un référentiel d’images Docker pour presque toutes les piles technologiques. Vous pouvez extraire une image Docker de DockerHub et commencer à construire des conteneurs.
Conteneurs Docker
Les conteneurs Docker sont des logiciels exécutables qui incluent toutes les dépendances nécessaires à l’exécution d’une application. Grâce aux conteneurs Docker, les applications peuvent fonctionner efficacement dans différents environnements informatiques.
Vous trouverez ci-dessous les caractéristiques des conteneurs Docker :
- Léger
- Frais généraux minimes (CPU/IO/Réseau)
- Déploiements plus rapides
- Facilement extensible
- Diminution de la consommation de stockage
- Portable, utilisez-le partout.
- Système d’exploitation de base minimal
- Isolation des applications
Dockerfile
Dockerfile est un script shell qui définit toutes les tâches qui doivent être exécutées. À partir d’un fichier Docker, vous créez une image Docker ; à partir de l’image Docker, vous créez un conteneur Docker.
Installation de Docker
Docker peut être facilement installé sur diverses plateformes Linux, Windows ou macOS. Consultez cet article sur l’installation de Docker sur Ubuntu, CentOS, Debian et Windows.
Docker Desktop est également disponible pour les machines Windows et Mac. Il s’agit d’une application exécutable très facile à installer qui permet de créer et de conteneuriser des applications sur les environnements Windows et Mac.
Éditions et prix de Docker
Il existe deux éditions de Docker :
- Community Edition (CE)
- Édition Entreprise (EE)
L’édition communautaire de Docker est open source et gratuite. Docker CE vise une approche “do it yourself” où les ingénieurs DevOps peuvent conteneuriser leurs applications par eux-mêmes.
L’édition entreprise de Docker se décline en trois versions : basique, standard et avancée. L’édition de base comprend une plateforme Docker, une assistance et une certification, tandis que les éditions standard et avancée proposent des fonctionnalités de gestion des conteneurs et d’analyse de la sécurité Docker, ajoutées aux fonctionnalités de l’édition de base.
La plupart des techniciens utilisent Docker gratuitement. Mais si vous avez besoin de fonctionnalités avancées, vous pouvez utiliser la version payante de Docker. Le prix dépend des fonctionnalités telles que la gestion du référentiel, les fonctionnalités CI/CD, la gestion des utilisateurs, les outils de développement et les options d’assistance.
Vous trouverez ci-dessous les détails du plan de Docker :
Maintenant que vous connaissez les principes fondamentaux de Docker, permettez-moi de vous montrer un exemple très simple de Docker.
Conteneur Docker Hello World
Je vais extraire une image docker hello-world de DockerHub et construire l’image pour créer un conteneur docker qui exécutera l’application. Cette image contient une application simple qui imprime un message de bienvenue depuis Docker.
Tout d’abord, je dois installer l’image docker hello-world sur ma machine Ubuntu.
Note: ceci suppose que Docker est déjà installé. Si ce n’est pas encore le cas, consultez le guide d’installation.
geekflare@geekflare:~$ docker pull hello-world
Utilisation du tag par défaut : latest
latest : Extraction de la bibliothèque/hello-world
0e03bdcc26d7 : Extraction terminée
Digest: sha256:49a1c8800c94df04e9658809b006fd8a686cab8028d33cfba2cc049724254202
Statut : Téléchargement d'une nouvelle image pour hello-world:latest
Vérifiez que l’image docker a bien été téléchargée.
geekflare@geekflare:~$ docker images
DÉPÔT TAG IMAGE ID CRÉÉ TAILLE
hello-world latest bf756fb1ae65 Il y a 7 mois 13.3kB
kubernetesui/dashboard v2.0.0-beta8 eb51a3597525 Il y a 8 mois 90.8MB
geekflare_mongodb latest 095d17727ca0 il y a 12 mois 325MB
Exécutez la commande ci-dessous pour créer un conteneur et exécuter l’application.
geekflare@geekflare:~$ docker run hello-world
Bonjour de Docker !
Ce message indique que votre installation semble fonctionner correctement.
Pour générer ce message, Docker a suivi les étapes suivantes :
1. Le client Docker a contacté le démon Docker.
2. Le démon Docker a extrait l'image "hello-world" du Docker Hub.
(amd64)
3. Le démon Docker a créé un nouveau conteneur à partir de cette image
qui produit le résultat que vous êtes en train de lire.
4. Le démon Docker a transmis cette sortie au client Docker, qui l'a envoyée à votre terminal
à votre terminal.
Pour essayer quelque chose de plus ambitieux, vous pouvez lancer un conteneur Ubuntu avec :
$ docker run -it ubuntu bash
Partagez des images, automatisez des flux de travail et bien plus encore avec un identifiant Docker gratuit :
https://hub.docker.com/
Pour plus d'exemples et d'idées, visitez le site :
https://docs.docker.com/get-started/
Maintenant, listez tous les conteneurs Docker. Vous pouvez voir que le conteneur hello-world a été exécuté il y a 1 minute.
geekflare@geekflare:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a1056caffc4 hello-world "/hello" il y a 1 minute Exited (0) il y a 1 minute zealous_bose
b0095c1e5536 geekflare_mongodb "/bin/sh -c usr/bin/..." il y a 12 mois Exit (0) il y a 12 mois mongo_container
Commencez à explorer Docker ; essayez ces commandes fondamentales de Docker.
Exécuter Nginx dans un conteneur Docker
Ici, je vais vous montrer comment déployer Nginx à l’intérieur d’un conteneur.
La commande ci-dessous recherche une image Nginx localement. Comme il n’y a pas d’image locale disponible, elle extrait l’image Nginx du docker hub. Elle crée ensuite un conteneur avec le nom nginx_geekflare
en utilisant l’image docker Nginx et exécute Nginx sur le port 80.
geekflare@geekflare:~$ docker run --name nginx_geekflare -p 80:80 -d nginx
Impossible de trouver l'image 'nginx:latest' localement
latest : Tiré de la bibliothèque/nginx
bf5952930446 : Extraction terminée
ba755a256dfe : Extraction terminée
c57dd87d0b93 : Extraction terminée
d7fbf29df889 : Pull complet
1f1070938ccd : Pull complet
Digest: sha256:36b74457bccb56fbf8b05f79c85569501b721d4db813b684391d63e02287c0b2
Statut : Téléchargement d'une image plus récente pour nginx:latest
fdad18387b27b48b8f2e14f8641791cc4d5edf667cc664198b67579cd76a5162
Lorsque vous listez les images Docker disponibles sur votre système, vous pouvez voir que l’image Docker de Nginx a été retirée.
geekflare@geekflare:~$ docker images
DÉPÔT TAG IMAGE ID CRÉÉ TAILLE
nginx latest 08393e824c32 il y a 4 jours 132MB
hello-world dernier bf756fb1ae65 il y a 7 mois 13.3kB
kubernetesui/dashboard v2.0.0-beta8 eb51a3597525 Il y a 8 mois 90.8MB
geekflare_mongodb latest 095d17727ca0 il y a 12 mois 325MB
Exécutez la commande ci-dessous pour lister tous les conteneurs en cours d’exécution. Vous pouvez voir que le conteneur nginx_geekflare
tourne à 0.0.0.0:80
geekflare@geekflare:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fdad18387b27 nginx "/docker-entrypoint...." il y a 58 secondes Up 32 secondes 0.0.0.0:80->80/tcp nginx_geekflare
1a1056caffc4 hello-world "/hello" Il y a environ une heure Exited (0) Il y a environ une heure zealous_bose
b0095c1e5536 geekflare_mongodb "/bin/sh -c usr/bin/..." Il y a 12 mois Exit (0) Il y a 12 mois mongo_container
Allez dans votre navigateur et ouvrez 0.0.0.0:80, vous pouvez voir que nginx est en place et fonctionne à l’intérieur d’un conteneur.
Cas d’utilisation courants de Docker
Simplification de la configuration: Docker peut fonctionner sur n’importe quelle plateforme à l’aide de sa configuration sans les frais généraux d’une machine virtuelle.
Il vous permet de placer le fichier de configuration dans le code et de passer des variables d’environnement pour répondre aux différents environnements. Ainsi, une image Docker peut être utilisée dans un environnement différent.
Gestion du code: Le code passe par différents environnements au cours de son voyage du développement à la production.
Chaque environnement présente une légère variation par rapport à l’autre. Docker élimine cette différence en fournissant un environnement cohérent, ce qui rend le développement et le codage beaucoup plus confortables.
Les images Docker étant immuables, elles présentent l’avantage de ne pas modifier l’environnement de l’application entre le développement et la production.
Amélioration de la productivité du développement: Les deux objectifs essentiels de l’écosystème de développement sont de faire en sorte que l’environnement de développement soit aussi proche que possible de l’environnement de production et d’obtenir un code de qualité le plus rapidement possible.
Docker permet au code de s’exécuter dans un conteneur qui reflète l’environnement de production et, contrairement aux machines virtuelles, Docker a une capacité de mémoire moins importante, ce qui permet à plusieurs services de fonctionner.
L’autre objectif est atteint lorsque nous utilisons le volume partagé de Docker pour que le code de l’application soit disponible pour le conteneur à partir de l’hôte. Cela permet au développeur de modifier le code source à partir de sa plateforme et de son éditeur, ce qui se répercute sur l’environnement en cours d’exécution à l’intérieur de Docker.
Isolement des applications: Dans certains cas, il peut être nécessaire d’isoler les applications, par exemple les serveurs API qui nécessitent différents Apache et un ensemble différent de dépendances.
L’exécution des serveurs API dans des conteneurs différents est une bien meilleure solution.
Capacités de débogage: Docker fournit de nombreux outils qui fonctionnent bien avec les conteneurs, avec la possibilité d’insérer des points de contrôle dans les conteneurs et également dans différents conteneurs, ce qui est tout à fait essentiel lors du test des applications.
Déploiement rapide: Les conteneurs Docker peuvent être créés rapidement, ce qui est possible car les conteneurs ne démarrent pas un système d’exploitation mais exécutent simplement l’application.
Une fois mis en place, ils vous donnent l’assurance qu’une fois que le code a fonctionné, il fonctionnera dans tous les environnements.
Conclusion
Docker, avec ses nombreux avantages, est en train de devenir un complément précieux à l’infrastructure informatique. J’espère que ce qui précède vous en a donné une idée.