Qu'est-ce que Docker Container? - Conteneurisez votre application à l'aide de Docker

Docker Container est une solution alternative légère à Virtual Machine pour créer, déployer et exécuter des applications à l'intérieur d'un conteneur.

Eh bien, j'espère que vous avez lu mes précédents blogs sur Docker où j'ai couvert les bases de Docker. Ici, dans ce blog Docker Container, je discuterai de ce que sont les conteneurs Docker et de leur fonctionnement. La plupart du temps, nous nous concentrerons sur les applications pratiques et les cas d'utilisation de Docker.

J'ai répertorié les sujets de ce blog Docker Container:





  • Pourquoi avons-nous besoin de conteneurs Docker?
  • Comment fonctionnent les conteneurs Docker?
  • Cas d'utilisation du conteneur Docker

Pourquoi avons-nous besoin de conteneurs Docker?

Je m'en souviens encore correctement, je travaillais sur un projet. Dans ce projet, nous suivions l'architecture des microservices. Pour ceux d'entre vous qui ne savent pas ce qu'est un microservice, ne vous inquiétez pas, je vais vous en faire une introduction.

L'idée derrière les microservices est que certains types d'applications deviennent plus faciles à créer et à maintenir lorsqu'ils sont décomposés en éléments plus petits et composables qui fonctionnent ensemble. Chaque composant est développé séparément, et l'application est alors simplement la somme de ses composants constitutifs.



Prenons l'exemple ci-dessous:

Application d

Dans le diagramme ci-dessus, il y a une boutique en ligne avec des microservices séparés pour le compte utilisateur, le catalogue de produits, le traitement des commandes et les paniers d'achat.



Eh bien, cette architecture présente de nombreux avantages:

  • Même si l'un de vos microservices échoue, l'ensemble de votre application n'est en grande partie pas affecté.
  • C'est plus facile à gérer

Il y a aussi de nombreux autres avantages, je n'entrerai pas dans les détails sur les microservices dans cet article. Mais, bientôt, je proposerai également quelques blogs sur les microservices.

Dans cette architecture, nous utilisions des machines virtuelles CentOS. Ces machines virtuelles ont été configurées en écrivant de longs scripts. Eh bien, la configuration de ces VM n'était pas le seul problème.

Le développement de telles applications nécessite le démarrage de plusieurs microservices sur une seule machine. Donc, si vous démarrez cinq de ces services, vous avez besoin de cinq machines virtuelles sur cette machine. Considérez le diagramme ci-dessous:

L'autre problème est assez courant, je sais que beaucoup d'entre vous peuvent s'y associer. L'application fonctionne sur l'ordinateur portable d'un développeur, mais pas en phase de test ou de production. Cela peut être dû au fait de ne pas conserver un environnement informatique cohérent. Considérez le diagramme ci-dessous:

Il y avait beaucoup d'autres problèmes en dehors de cela aussi, mais je pense que ces problèmes me suffisent pour vous expliquer le besoin de Docker Containers.

Découvrez comment les conteneurs Docker sont meilleurs que les machines virtuelles

Alors, imaginez si je donne 8 Go de RAM à toutes mes VM et que j'ai 5 microservices fonctionnant sur différentes machines virtuelles. Dans ce cas, ces machines virtuelles nécessiteront 40 Go de RAM. Eh bien, maintenant, j'ai besoin que les configurations de ma machine hôte soient très élevées, près de 44 Go de RAM devraient être là dans ma machine hôte. Évidemment, ce n'est pas une solution durable pour une telle architecture car je gaspille beaucoup de ressources ici.

Bien, j'ai beaucoup de ressources à gaspiller, mais j'ai toujours un problème d'incohérence dans mon cycle de vie de livraison de logiciels (SDLC). Je dois configurer ces VM en test ainsi qu'en environnement prod. À un moment donné de ce processus, certains logiciels n'ont pas été mis à jour sur le serveur de test et l'équipe de développement utilise la version mise à jour du logiciel. Cela conduit à des conflits.

Que se passe-t-il si j'utilise 100 machines virtuelles, alors la configuration de chaque machine virtuelle prendra beaucoup de temps, et en même temps, elle est également sujette à des erreurs.

Maintenant, voyons ce qu'est Docker Container et comment il fonctionne, et comment il a résolu mon problème.

Qu'est-ce qu'un conteneur Docker?

Docker est un outil conçu pour faciliter la création, le déploiement et l'exécution d'applications à l'aide de conteneurs.

Vous pouvez créer des conteneurs Docker, ces conteneurs contiendront tous les binaires et bibliothèques requis pour votre application ou microservice dans mon cas. Donc, votre application est présente dans un conteneur, ou vous avez conteneurisé votre application. Désormais, ce même conteneur peut être utilisé dans l'environnement Test and Prod.

Les conteneurs Docker sont une solution légère pour les machines virtuelles et utilisent le système d'exploitation hôte. Le meilleur, vous n'avez pas à pré-allouer de RAM au Docker Container, il la prendra au fur et à mesure des besoins. Ainsi, avec Docker Container, je n'ai pas à me soucier du gaspillage de ressources.

Voyons maintenant comment fonctionne un conteneur Docker.

Comment fonctionne un conteneur Docker?

Le diagramme ci-dessous est fondamentalement un moyen d'utiliser Docker. Et je suppose que vous avez une idée de Docker Image et Dockerfile.

Les gars, je sais que le diagramme a l'air un peu complexe, mais croyez-moi, ce n'est pas si complexe. Vous trouverez ci-dessous l'explication du diagramme, même après cela, vous pensez qu'il est difficile à comprendre, vous pouvez commenter votre doute, je vais répondre à ces questions dès que possible.

  • Un développeur écrira d'abord le code du projet dans un fichier Docker, puis créera une image à partir de ce fichier.
  • Cette image contiendra l'intégralité du code du projet.
  • Maintenant, vous pouvez exécuter cette image Docker pour créer autant de conteneurs que vous le souhaitez.
  • Cette image Docker peut être téléchargée sur le hub Docker (il s'agit essentiellement d'un référentiel cloud pour vos images Docker, vous pouvez le garder public ou privé).
  • Cette image Docker sur le hub Docker peut être extraite par d'autres équipes telles que QA ou Prod.

Cela évite non seulement le gaspillage de ressources, mais garantit également que l’environnement informatique qui se trouve dans l’ordinateur portable d’un développeur est également répliqué dans d’autres équipes. Je pense maintenant que je n’ai pas à vous dire pourquoi nous avons besoin de Docker.

C'était une façon de l'utiliser, je suppose que vous devez être curieux de savoir comment j'ai utilisé Docker pour résoudre mon problème de microservices. Permettez-moi de vous donner un aperçu de la même chose.

Ci-dessous l'explication du diagramme:

  • Tout d'abord, nous avons écrit les exigences complexes dans un Dockerfile.
  • Ensuite, nous l'avons poussé sur GitHub.
  • Après cela, nous avons utilisé un serveur CI (Jenkins).
  • Ce serveur Jenkins le extraira de Git et construira l'environnement exact. Cela sera utilisé dans les serveurs de production ainsi que dans les serveurs de test.
  • Nous l'avons déployé dans des environnements de préparation (cela fait référence au déploiement de votre logiciel sur des serveurs à des fins de test, avant de les déployer entièrement en production.) Pour les testeurs.
  • Fondamentalement, nous avons intégré exactement ce que nous avions en développement, test et mise en production.

Il sera en fait juste de dire que Docker m'a simplifié la vie.

Eh bien, c’était l’histoire de mon entreprise, regardons l’étude de cas de l’Université de l’Indiana. Comment Docker a résolu leurs problèmes.

Étude de cas de l'Université d'Indiana:

L'Université de l'Indiana est un système universitaire public multi-campus situé dans l'État de l'Indiana, aux États-Unis.

Énoncé du problème

Ils utilisaient des scripts personnalisés pour déployer les applications dans la machine virtuelle.

Leur environnement a été optimisé pour leurs anciennes applications Java. Leur environnement en pleine croissance implique de nouveaux produits qui ne sont pas uniquement basés sur Java. Afin de donner à ses étudiants la meilleure expérience possible, l'Université devait commencer à moderniser les applications.

L'Université souhaitait améliorer la manière dont ils architecturaient les applications, en passant à une architecture basée sur des microservices pour leurs applications.

La sécurité était nécessaire pour les données des étudiants telles que les SSN et les données sur la santé des étudiants.

Solution:

Tous les problèmes ont été résolus par Docker Data Center (DDC), considérez le diagramme ci-dessous:

Registre de confiance Docker - Il stocke les images Docker.

trier une liste c ++

Interface utilisateur Web UCP (Universal Control Plane) - Aide à gérer l'ensemble du cluster à partir d'un seul endroit. Les services sont déployés à l'aide de l'interface utilisateur Web UCP, à l'aide d'images Docker stockées dans DTR (Docker Trusted Registry).

Les équipes des opérations informatiques utilisent Universal Control Plane pour provisionner les logiciels installés par Docker sur les hôtes, puis déployer leurs applications sans avoir à effectuer un tas d'étapes manuelles pour configurer toute leur infrastructure.

UCP et DTR s'intègrent à leur serveur LDAP pour fournir rapidement l'accès à leurs applications.

J'espère que vous avez lu les blogs précédents pour apprendre les bases de Docker.

Maintenant, je vais vous expliquer comment nous pouvons utiliser Docker Compose pour une application multi-conteneur.

Docker Hands-On:

Je suppose que vous avez installé Docker.J'utiliserai Docker Compose dans cet article, ci-dessous, j'ai donné une petite introduction à Docker Compose.

Docker Compose: C'est un outil pour définir et exécuter des applications Docker multi-conteneurs. Avec Docker Compose, vous pouvez utiliser un fichier Compose pour configurer les services de votre application. Ensuite, à l'aide d'une seule commande, vous pouvez créer et démarrer tous les services à partir de votre configuration.

Supposons que vous ayez plusieurs applications dans différents conteneurs et que tous ces conteneurs soient liés entre eux. Vous ne souhaitez donc pas exécuter chacun de ces conteneurs un par un. Mais vous souhaitez exécuter ces conteneurs avec une seule commande. C’est là que Docker Compose entre en jeu. Avec lui, vous pouvez exécuter plusieurs applications dans différents conteneurs avec une seule commande. c'est-à-dire docker-composer.

Exemple: imaginez que vous avez différents conteneurs, l'un exécutant une application Web, un autre exécutant un postgres et un autre exécutant Redis, dans un fichier YAML. Cela s'appelle le fichier de composition de docker, à partir de là, vous pouvez exécuter ces conteneurs avec une seule commande.

Prenons un autre exemple:

Supposons que vous souhaitiez publier un blog, pour cela vous utiliserez CMS (Content Management System), et wordpress est le CMS le plus utilisé. Fondamentalement, vous avez besoin d'un conteneur pour WordPress et vous avez besoin d'un autre conteneur en tant que MySQL pour le back-end, ce conteneur MySQL doit être lié au conteneur wordpress. Nous avons également besoin d'un autre conteneur pour Php Myadmin qui sera lié à la base de données MySQL, essentiellement, il est utilisé pour accéder à la base de données MySQL.

Que diriez-vous d'exécuter pratiquement l'exemple ci-dessus.

Étapes impliquées:

  1. Installez Docker Compose :
  2. Installez WordPress: Nous utiliserons la version officielle WordPress et MariaDB Images Docker.
  3. Installez MariaDB: C'est l'un des serveurs de bases de données les plus populaires au monde. Il est créé par les développeurs originaux de MySQL. MariaDB est développé en tant que logiciel open source et en tant que base de données relationnelle, il fournit une interface SQL pour accéder aux données.
  4. Installez PhpMyAdmin: Il s'agit d'un outil logiciel libre écrit en PHP, destiné à gérer l'administration de MySQL sur le Web.
  5. Créez le site WordPress:

Commençons!

Installez Docker Compose:

Installez d'abord Python Pip:

sudo apt-get installer python-pip

Maintenant, vous pouvez installer Docker Compose:

sudo pip installer docker-compose

Installez WordPress:

Créez un répertoire wordpress:

mkdir wordpress

Entrez dans ce répertoire wordpress:

cd wordpress /

Dans ce répertoire, créez un fichier Docker Compose YAML, puis modifiez-le à l'aide de gedit:

sudo gedit docker-compose.yml

Collez les lignes de code ci-dessous dans ce fichier yaml:

wordpress: image: liens wordpress: - wordpress_db: ports mysql: - 8080: 80 wordpress_db: image: environnement mariadb: MYSQL_ROOT_PASSWORD: edureka phpmyadmin: image: liens corbinu / docker-phpmyadmin: - wordpress_db: ports mysql: - environnement 8181: 80: MYSQL_USERNAME: racine MYSQL_ROOT_PASSWORD: edureka

Je sais que vous voulez que j'explique ce code, donc ce que je vais faire, je vais prendre de petites sections de ce code et vous expliquer ce qui se passe.

wordpress_db: ... environnement: MYSQL_ROOT_PASSWORD: edureka ...

Cela définira une variable d'environnement dans le conteneur wordpress_db appelé MYSQL_ROOT_PASSWORD avec le mot de passe souhaité. L'image MariaDB Docker est configurée pour vérifier cette variable d'environnement lors de son démarrage et se chargera de la configuration de la base de données avec un compte root avec le mot de passe défini comme MYSQL_ROOT_PASSWORD.

wordpress: ... ports: - 8080: 80 ...

Le premier numéro de port est le numéro de port sur l'hôte et le deuxième numéro de port est le port à l'intérieur du conteneur. Ainsi, cette configuration transfère les requêtes sur le port 8080 de l'hôte vers le port 80 par défaut du serveur Web à l'intérieur du conteneur.

phpmyadmin: image: liens corbinu / docker-phpmyadmin: - wordpress_db: ports mysql: - 8181: 80 environnement: MYSQL_USERNAME: root MYSQL_ROOT_PASSWORD: edureka

Cela saisit docker-phpmyadmin par le membre de la communauté corbinu, le lie à notre conteneur wordpress_db avec le nom mysql (ce qui signifie que depuis l'intérieur du conteneur phpmyadmin, les références au nom d'hôte mysql seront transmises à notre conteneur wordpress_db), expose son port 80 sur le port 8181 du système hôte, et définit enfin quelques variables d'environnement avec notre nom d'utilisateur et notre mot de passe MariaDB. Cette image ne récupère pas automatiquement la variable d’environnement MYSQL_ROOT_PASSWORD de l’environnement de wordpress_dbcontainer, comme le fait l’image wordpress. Nous devons en fait copier la ligne MYSQL_ROOT_PASSWORD: edureka du conteneur wordpress_db, et définir le nom d'utilisateur sur root.

Maintenant, démarrez le groupe d'applications:

docker-compose up -d

C’est tout ce que vous avez à faire. Vous pouvez ajouter autant de conteneurs que vous le souhaitez de cette manière et les lier de la manière qui vous convient.

Maintenant, dans le navigateur, accédez au port 8080, en utilisant votre adresse IP publique ou votre nom d'hôte, comme indiqué ci-dessous:

hôte local: 8080

Remplissez ce formulaire et cliquez sur installer WordPress.

Une fois l'opération terminée, visitez à nouveau l'adresse IP de votre serveur (cette fois en utilisant le port 8181, par exemple localhost: 8181). Vous serez accueilli par l'écran de connexion phpMyAdmin:

Allez-y et connectez-vous en utilisant le nom d'utilisateur root et le mot de passe que vous avez définis dans le fichier YAML, et vous pourrez parcourir votre base de données. Vous remarquerez que le serveur comprend une base de données wordpress, qui contient toutes les données de votre installation WordPress.

Ici, je termine mon blog Docker Container. J'espère que vous avez apprécié ce post. Tu peux vérifier autres blogs dans la série aussi, qui traitent des bases de Docker.

Si vous avez trouvé ce blog Docker Container pertinent, consultez le par Edureka, une entreprise d'apprentissage en ligne de confiance avec un réseau de plus de 250 000 apprenants satisfaits répartis dans le monde entier. Le cours de formation à la certification Edureka DevOps aide les apprenants à acquérir une expertise dans divers processus et outils DevOps tels que Puppet, Jenkins, Docker, Nagios, Ansible, Chef, Saltstack et GIT pour automatiser plusieurs étapes dans SDLC.

Vous avez une question pour moi? Veuillez le mentionner dans la section des commentaires et je vous répondrai.