Comprendre Docker pour les débutants - la technologie des conteneurs

Ayez une idée du conteneur Docker.
Dans l'espace technologique d'aujourd'hui, "Cela fonctionne sur mon système" est une expression très courante utilisée par les développeurs. Mais il existe de nombreux cas où l'application exécutée sur un système de développement ne s'exécute 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 ces problèmes. 💯
Pourquoi Docker ?
Laissez-moi vous parler de mon expérience personnelle de la raison pour laquelle 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 un base de données. Nous sommes restés coincés dans 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 que toutes les technologies sont compatibles avec le système d'exploitation que j'utilise. Il y a eu des cas où la version d'angular ne fonctionnait pas avec la version du système d'exploitation que j'utilisais, j'ai donc dû changer la version du système d'exploitation plusieurs fois.
- Étant donné que 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 à niveau. J'ai rencontré beaucoup de problèmes de compatibilité avant d'arriver à une version stable de toutes les technologies que j'utilisais pour mon application. La mise à niveau d'un seul outil utilisé dans mon application était une entreprise risquée.
- Plus tard, j'ai eu plus de développeurs travaillant sur mon application. La pile technologique étant lourde, ils ont dû exécuter plusieurs commandes pendant des heures pour configurer leur environnement, qui était compatible avec l'application. J'ai dû vérifier et évaluer l'environnement de chaque développeur pour m'assurer qu'il n'y avait pas d'incompatibilité 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 était difficile pour lui de travailler sur l'application.
Tout cela a rendu la vie difficile pour développer, construire et expédier l'application à temps. 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 plate-forme de conteneurisation qui regroupe l'application et ses dépendances dans un conteneur afin que l'application fonctionne de manière transparente dans n'importe quel environnement, qu'il s'agisse de développement, de mise en scène ou 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 légers des alternatives aux machines virtuelles et utilise le système d'exploitation hôte. Vous n'avez pas à pré-allouer de RAM dans les conteneurs comme vous le faites dans les machines virtuelles.
Il s'agit d'une plate-forme open source permettant aux développeurs, aux administrateurs système et aux entreprises de créer, expédier et exécuter des applications distribuées à la volée.
Pour en savoir plus sur le fonctionnement interne de Docker, consultez le Architecture Docker.
Images Docker, conteneurs, fichier Docker
Image Docker
L'image Docker est un modèle nécessaire pour exécuter une application. Il se compose de code d'application, de bibliothèques, d'outils, de dépendances, etc.
Les images Docker sont des fichiers immuables en lecture seule, parfois également appelés instantanés. Vous ne démarrez pas ou n'exécutez pas une image Docker ; vous construisez un conteneur à travers elle. 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 à 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 à créer des conteneurs.

Docker Containers
Les conteneurs Docker sont des packages logiciels exécutables qui incluent toutes les dépendances requises pour exécuter une application. Avec les conteneurs Docker, les applications peuvent fonctionner efficacement dans différents environnements informatiques.
Voici les fonctionnalités des conteneurs Docker:
- Léger
- Surcharge minimale (CPU / E / S / réseau)
- Déploiements plus rapides
- Facilement évolutif
- Diminuer la consommation de stockage
- Portable, exécutez-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 à exécuter. À 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 plates-formes Linux, Windows ou macOS. Consultez ce post sur Comment installer Docker sur Ubuntu, CentOS, Debian et Windows.
Aussi, les Bureau Docker est disponible pour les machines Windows et Mac. Il s'agit d'une application exécutable très facile à installer et qui permet de créer et de conteneuriser des applications sur des environnements Windows et Mac.
Éditions et tarifs Docker
Il existe deux éditions de Docker:
- Édition communautaire (CE)
- Édition Entreprise (EE)
L'édition communautaire Docker est open source et gratuite. Docker CE vise une approche «faites-le vous-même» où DevOps les ingénieurs peuvent eux-mêmes conteneuriser leurs applications.
L'édition entreprise de Docker est livrée avec trois versions - Essentiel, la norme, et Avancée. L'édition de base est livrée avec une plate-forme Docker, un support et une certification, tandis que les éditions standard et avancées sont livrées avec des fonctionnalités de gestion des conteneurs et d'analyse de 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 de 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 de support.
Voici les détails du plan de Docker:

Maintenant que vous connaissez les principes de base de Docker, laissez-moi vous montrer un exemple de docker très simple.
Conteneur Docker Hello World
Je vais tirer un image de docker bonjour-monde à partir de DockerHub et créez l'image pour créer un conteneur Docker qui exécutera l'application. Cette image contient une application simple pour imprimer un message d'accueil de Docker.
Tout d'abord, je dois extraire l'image docker hello-world sur ma machine Ubuntu.
Notes: cela 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
Using default tag: latest
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:49a1c8800c94df04e9658809b006fd8a686cab8028d33cfba2cc049724254202
Status: Downloaded newer image for hello-world:latest
Vérifiez si l'image du docker a été extraite.
geekflare@geekflare:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 7 months ago 13.3kB
kubernetesui/dashboard v2.0.0-beta8 eb51a3597525 8 months ago 90.8MB
geekflare_mongodb latest 095d17727ca0 12 months ago 325MB
Exécutez la commande ci-dessous pour créer un conteneur et exécuter l'application.
geekflare@geekflare:~$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Maintenant, répertoriez tous les conteneurs Docker. Vous pouvez voir le conteneur hello-world 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" 1 minutes ago Exited (0) 1 minutes ago zealous_bose
b0095c1e5536 geekflare_mongodb "/bin/sh -c usr/bin/…" 12 months ago Exited (0) 12 months ago mongo_container
Commencez à explorer Docker; essayez ces fondamentaux commandes docker.
Exécuter Nginx dans un conteneur Docker
Ici, je vais vous montrer comment déployer Nginx dans un conteneur.
La commande ci-dessous recherche une image Nginx localement. Puisqu'il n'y a pas d'image locale disponible, il extrait l'image docker Nginx du hub docker. Il crée ensuite un conteneur avec le nom nginx_geekflare
à l'aide de l'image docker Nginx et exécute Nginx sur le port 80.
geekflare@geekflare:~$ docker run --name nginx_geekflare -p 80:80 -d nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
bf5952930446: Pull complete
ba755a256dfe: Pull complete
c57dd87d0b93: Pull complete
d7fbf29df889: Pull complete
1f1070938ccd: Pull complete
Digest: sha256:36b74457bccb56fbf8b05f79c85569501b721d4db813b684391d63e02287c0b2
Status: Downloaded newer image for nginx:latest
fdad18387b27b48b8f2e14f8641791cc4d5edf667cc664198b67579cd76a5162
Lorsque vous répertoriez les images Docker disponibles sur votre système, vous pouvez voir que l'image Nginx Docker a été extraite.
geekflare@geekflare:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 08393e824c32 4 days ago 132MB
hello-world latest bf756fb1ae65 7 months ago 13.3kB
kubernetesui/dashboard v2.0.0-beta8 eb51a3597525 8 months ago 90.8MB
geekflare_mongodb latest 095d17727ca0 12 months ago 325MB
Exécutez la commande ci-dessous pour répertorier tous les conteneurs en cours d'exécution. Vous pouvez voir le conteneur nginx_geekflare
court à 0.0.0.0:80
geekflare@geekflare:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fdad18387b27 nginx "/docker-entrypoint.…" 58 seconds ago Up 32 seconds 0.0.0.0:80->80/tcp nginx_geekflare
1a1056caffc4 hello-world "/hello" About an hour ago Exited (0) About an hour ago zealous_bose
b0095c1e5536 geekflare_mongodb "/bin/sh -c usr/bin/…" 12 months ago Exited (0) 12 months ago mongo_container
Accédez à votre navigateur et ouvrez 0.0.0.0:80, vous pouvez voir que nginx est opérationnel dans un conteneur.

Cas d'utilisation courants de Docker
Simplification de la configuration: Docker peut fonctionner sur n'importe quelle plate-forme à l'aide de sa configuration sans la surcharge réelle d'une machine virtuelle.
Il vous permet de mettre le fichier de configuration dans le code et de transmettre des variables d'environnement pour répondre à différents environnements. Pour qu'une image du docker puisse être utilisée dans un environnement différent.
Gestion de code: Le code voyage dans un environnement différent au cours de son parcours 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, rendant le développement et le codage beaucoup plus confortables.

Les images Docker étant immuables, elles ont l'avantage de n'avoir aucun changement dans l'environnement d'application du développement à la production.
Amélioration de la productivité du développement: Les deux objectifs essentiels de l'écosystème de développement sont de faire répliquer l'environnement de développement au plus près de l'environnement de production et le prochain objectif d'obtenir un code de qualité livré le plus rapidement possible.
Docker permet au code de s'exécuter dans un conteneur qui reflète l'environnement de production, et contrairement à VM, docker a une capacité de mémoire de surcharge moindre en termes de capacité de mémoire, ce qui permet à plusieurs services de s'exécuter.
L'autre objectif est atteint car nous utilisons le volume partagé du Docker pour que le code d'application soit disponible pour le conteneur à partir de l'hôte. Cela permet au développeur d'éditer le code source à partir de sa plate-forme et de son éditeur, ce qui reflétera l'environnement en cours d'exécution à l'intérieur du Docker.
Isolement des demandes: Il y a des cas où l'isolement d'application peut être nécessaire, par exemple, API serveurs qui nécessitent un apache différent et un ensemble différent de dépendances.
L'exécution de serveurs API sous différents conteneurs 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 des conteneurs et également différents conteneurs, ce qui est tout à fait essentiel lors du test des applications.
Déploiement rapide: Les conteneurs Docker peuvent être créés assez rapidement, ce qui est obtenu car les conteneurs ne démarrent pas un système d'exploitation mais exécutent simplement l'application.
Une fois définis, 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, devient un ajout précieux à l'infrastructure informatique. J'espère que ce qui précède vous donne une idée à ce sujet. Si vous souhaitez suivre des cours en ligne, je vous recommande de suivre Cours en ligne Docker Mastery.