Un guide du débutant à Docker Compose

Un guide du débutant à Docker Compose
Docker Compose est l'un des outils les plus utiles pour les développeurs de logiciels et les administrateurs système. De nombreux emplois nécessitent une personne ayant une connaissance de cette technologie, donc Docker et Docker Compose sont chauds dans l'espace DevOps. Sans aucun doute, savoir comment utiliser ces technologies bénéficiera à votre carrière informatique.

Si vous êtes un débutant à composer Docker, mais que vous avez une certaine connaissance de Docker, cet article est pour vous. Vous pourrez apprendre sur:

  • Qu'est-ce que Docker Compose?
  • Comparaisons populaires
  • Docker Compose vs Kubernetes
  • Docker compose vs docker essaim
  • Installation de Docker Compose
  • Le docker-compose.fichier yml
  • Commandes de compose docker

Avant de plonger dans les parties juteuses de cet article, un peu de fond sur la technologie devrait être génial.

La conteneurisation est devenue un élément clé de l'infrastructure logicielle, et cela s'applique à des projets importants, moyens ou à petite échelle. Bien que les conteneurs ne soient pas nouveaux, Docker les a rendus populaires. Avec les conteneurs, les problèmes de dépendance deviennent une chose du passé. Les conteneurs jouent également un rôle énorme pour rendre l'architecture micro-services très efficace. Les applications logicielles sont constituées de services plus petits, il est donc facile d'avoir ces services dans des conteneurs, et ils communiquent.

Le problème avec cela, c'est qu'il y aura tellement de conteneurs courir. De sorte que les gérer devient complexe. Cela crée un besoin d'un outil aide à exécuter plusieurs conteneurs, ce que Docker Compose. À la fin de l'article, vous comprendrez les concepts de base Docker Compose et pourrez l'utiliser également.

Qu'est-ce que Docker Compose?

Sans toute la complexité, Docker Compose est un outil qui vous permet de gérer plusieurs conteneurs Docker. N'oubliez pas les micro-services? Le concept de division d'une application Web en différents services? Eh bien, ces services fonctionneront dans des conteneurs individuels qui doivent être gérés.

Imaginez qu'une application Web a certains de ces services:

  • S'inscrire
  • S'identifier
  • Réinitialiser le mot de passe
  • Histoire
  • Graphique

À la suite d'une architecture de type microservice, ces services seront divisés et exécutés dans des conteneurs séparés. Docker Compose permet de gérer facilement tous ces conteneurs, au lieu de les gérer individuellement. Il est important de noter que Docker Compose ne construit pas explicitement d'images Docker. Le travail de construction d'images est réalisé par Docker via le dockerfile.

Comparaisons populaires

Il est courant d'avoir de nombreuses solutions à un problème. Docker Compose résout ce problème de gestion de plusieurs conteneurs. En conséquence, il y a souvent des comparaisons avec d'autres solutions. Vous devez noter que la plupart de ces comparaisons sont les mauvaises. Bien qu'ils ne soient souvent pas valables, il est préférable de les apprendre car cela vous aide à comprendre mieux Docker.

Les deux comparaisons à discuter sont:

  • Docker Compose vs Kubernetes
  • Docker compose vs docker essaim

Docker Compose vs Kubernetes

Kubernetes est souvent comparé à Docker Compose. Mais, les similitudes dans les deux outils sont minuscules, avec de grandes dissemblances. Ces technologies ne sont pas au même niveau ou à la même échelle. Par conséquent, comparer les deux outils est carrément erroné.

Kubernetes, populairement connu sous le nom de K8S, est un outil open-source qui peut être utilisé pour automatiser les conteneurs (non limités à Docker). Avec K8S, vous pouvez déployer et administrer des conteneurs, en vous assurant qu'ils évoluent à différentes charges. Kubernetes garantit que les conteneurs sont tolérants aux pannes et fonctionnent de manière optimale en les faisant auto-guérison, que vous n'obtiendrez pas de Docker Compose.

Kubernetes est un outil plus puissant. Il est plus adapté à l'administration de conteneurs pour des applications à grande échelle en production.

Docker compose vs docker essaim

Docker Compose est également souvent comparé à Docker Swarm, et c'est aussi mal que la comparaison de Kubernetes. Au lieu de cela, Docker Swarm devrait être celui comparé à Kubernetes.

Docker Swarm est un outil open-source qui vous permet d'effectuer une orchestration de conteneur comme vous le feriez. Les deux ont leurs avantages et leurs inconvénients, mais ce n'est pas le sujet de la discussion. Vous ferez bien en sachant que les deux sont similaires et non plus une alternative à Docker Compose.

Installation de Docker Compose

Docker Compose est un outil officiel Docker, mais il ne vient pas avec l'installation de Docker. Vous devez donc l'installer comme un package séparé. Le processus d'installation de Docker Compose pour Windows et Mac est disponible sur le site officiel.

Pour installer Docker Compose sur Ubuntu, vous pouvez utiliser la commande suivante:

sudo apt-get install docker-compose

Pour installer Docker Compose sur d'autres distros Linux, vous pouvez utiliser Curl. Exécutez simplement les commandes suivantes:

sudo curl -l
https: // github.com / docker / compose / releases / download / 1.18.0 / docker-compose-'uname
-S '-' uname -m '-o / usr / local / bin / docker-compose

Alors:

sudo chmod + x / usr / local / bin / docker-compose

La première commande télécharge la dernière version de Docker Compose au répertoire dédié aux packages. Le second définit les autorisations de fichier, ce qui le rend exécutable.

Le docker-compose.fichier yml

Il ne sera pas terriblement faux de dire qu'un fichier Docker Compose est à Docker Compose, ce qu'est un Dockerfile à Docker. À l'intérieur du fichier Docker Compose, se trouve toutes les instructions que Docker Compose suit lors de la gestion des conteneurs. Ici, vous définissez les services qui finissent par être des conteneurs. Vous définissez également les réseaux et les volumes dont les services dépendent.

Le fichier Docker Compose utilise la syntaxe YAML, et vous devez enregistrer sous forme de compose Docker.YML. Vous pouvez avoir des services pour le backend, le frontend, la base de données et les files d'attente de messages dans une application Web. Ces services auront besoin de dépendances spécifiques. Des dépendances telles que les réseaux, les ports, le stockage pour un fonctionnement optimal. Tout ce qui est nécessaire pour l'ensemble de l'application sera défini dans le fichier Docker Compose.

Vous avez besoin d'une compréhension de base de la syntaxe YAML pour écrire votre fichier de composition. Si vous n'êtes pas familier avec cela, cela devrait prendre moins d'une heure pour saisir. Il y aura beaucoup de couples ou directives de valeur clé dans votre fichier. Les niveaux supérieurs sont:

  • Version
  • Prestations de service
  • Réseau
  • Volumes

Cependant, seule la version et les services seront discutés, car vous pouvez définir les deux autres dans la directive des services.

Version

Lorsque vous écrivez votre fichier, vous définissez d'abord la version. Comme au moment de la rédaction du moment de la rédaction, Docker Compose n'a que les versions 1, 2 et 3. Il n'est pas surprenant que ce soit la version recommandée à utiliser car il a certaines différences par rapport aux anciennes versions.

Vous pouvez spécifier la version à utiliser pour Docker Compose dans le fichier comme indiqué ci-dessous:

  • Version: «3»
  • Version 2.4 ”
  • Version 1.0 ”

Prestations de service

La clé de service est sans doute la clé la plus importante d'un fichier docker composé. Ici, vous spécifiez les conteneurs que vous souhaitez créer. Il existe de nombreuses options et des tonnes de combinaisons pour configurer des conteneurs dans cette section du fichier. Ce sont quelques options que vous pouvez définir sous la clé de services:

  • Image
  • Contenant_name
  • Redémarrage
  • Dépend de
  • Environnement
  • Ports
  • Volumes
  • Réseaux
  • Point d'accès

Dans le reste de cette section, vous apprendrez comment chacune de ces options affecte les conteneurs.

Image

Cette option définit quelle image comme le service utilise. Il utilise la même convention que vous utilisez lorsque vous tirez une image de DockerHub dans un dockerfile. Voici un exemple:

Image: Postgres: Dernière

Cependant, il n'y a aucune restriction à l'utilisation de fichiers dockerhub seuls. Vous pouvez également construire des images à partir de votre machine via votre fichier Docker Compose, à l'aide d'un Dockerfile. Vous pouvez utiliser les directives «build», «contexte» et «dockerfile» pour ce faire.

Voici un exemple:

construire:
contexte: .
dockerfile: dockerfile

«Contexte» devrait contenir le chemin vers le répertoire avec le dockerfile. Alors "dockerfile" contient le nom du dockerfile à utiliser. Il est conventionnel de toujours nommer vos dockerfiles comme «dockerfile», mais cela donne l'occasion d'utiliser quelque chose de différent. Vous devez noter que ce n'est pas le seul moyen d'utiliser une image via un dockerfile.

Contenant_name

Docker attribue des noms aléatoires aux conteneurs. Mais vous pouvez désirer avoir des noms personnalisés pour les conteneurs. Avec la touche «conteneur_name», vous pouvez donner des noms spécifiques aux conteneurs, au lieu de noms de noms de dockers.

Voici un exemple:

contener_name: linuxhint-app

Cependant, il y a une chose dont vous devriez faire attention: ne donnez pas le même nom à plusieurs services. Les noms de conteneurs doivent être uniques; Cela entraînera l'échec des services.

Redémarrage

L'infrastructure logicielle est vouée à l'échec. Avec la connaissance de cela, il est plus facile de planifier de se remettre de cet échec. Il existe de nombreuses raisons pour qu'un conteneur échoue, de sorte que la clé de redémarrage dit au conteneur de se réveiller ou non. Vous avez les options suivantes, non, toujours, à la hauteur et à moins d'être arrêtées. Ces options impliquent qu'un conteneur ne redémarrera jamais, redémarrera toujours, ne redémarrera que l'échec ou seulement lors de l'arrêt.

Voici un exemple:

redémarrer: toujours

Dépend de

Services exécutés isolément. Mais pratiquement, les services ne peuvent pas faire grand-chose isolément. Il doit y avoir une dépendance à l'égard d'autres services. Par exemple, le service backend d'une application Web dépendra des bases de données, des services de mise en cache, etc. Sur la clé «Depend_on», vous pouvez ajouter les dépendances.

Voici un exemple:

dépend de:
- db

Cela signifie que Docker Compose lancera ces services avant celui actuel. Cependant, cela ne garantit pas que ces services sont prêts à l'usage. La seule garantie est que les conteneurs commenceront.

Environnement

Les applications dépendent de certaines variables. Pour la sécurité et la facilité d'utilisation, vous les extraire du code et les configurez comme variables d'environnement. Des exemples de telles variables sont les clés d'API, les mots de passe, etc. Ce sont communs dans les applications Web. Notez que cette clé ne fonctionne que s'il n'y a pas de directive «build» dans ce service. Par conséquent, créez l'image à l'avance.

Regarde ça:

environnement:
API-Key: «The-ap-Key»
Config: «développement»
Session_secret: «The Secret»

Si vous avez l'intention d'utiliser la directive «build» malgré tout, vous devrez définir les variables d'environnement dans une directive «args». La directive «Args» est une sous-directive de la «construction».

Voici un exemple:

construire:
contexte: .
Args:
API-Key: «The-ap-Key»
config: «développement»
Session_secret: «The Secret»

Ports

Aucun conteneur ne fonctionne isolément malgré une course séparément des autres. Pour fournir un lien pour communiquer avec le «monde extérieur», vous devez cartographier les ports. Vous mappez le port du conteneur Docker vers le port hôte réel. De Docker, vous avez peut-être rencontré l'argument «-p» qui est utilisé pour cartographier les ports. La directive des ports fonctionne similaire à l'argument «-p».

PORTS:
- "5000: 8000"

Volumes

Les conteneurs Docker n'ont aucun moyen de stocker des données de manière persistante, ils perdent donc des données lorsqu'ils redémarrent. Avec des volumes, vous pouvez contourner ce. Les volumes permettent de créer un stockage de données persistantes. Il le fait en montant un répertoire de l'hôte Docker dans le répertoire du conteneur Docker. Vous pouvez également configurer des volumes en tant que services de haut niveau.

Voici un exemple:

Volumes:
- host-dir: / test / répertoire

Il existe de nombreuses options disponibles lors de la configuration des volumes, vous pouvez les vérifier.

Réseaux

Les réseaux peuvent également être créés dans les services. Avec la clé de réseaux, vous pouvez configurer le réseautage pour les services individuels. Ici, vous pouvez configurer le pilote que le réseau utilise, s'il permet IPv6, etc. Vous pouvez également configurer des réseaux comme les services, tout comme les volumes.

Voici un exemple:

Réseaux:
- défaut

Il existe de nombreuses options lors de la configuration des réseaux, vous pouvez les vérifier.

Point d'accès

Lorsque vous démarrez un conteneur, vous devez souvent exécuter certaines commandes. Par exemple, si le service est une application Web, vous devez démarrer le serveur. La clé de point d'entrée vous permet de le faire. Le point d'entrée fonctionne comme le point d'entrée dans dockerfile. La seule différence dans ce cas est que tout ce que vous définissez ici remplace les configurations de point d'entrée dans le dockerfile.Point d'entrée: Flask Run

Voici un exemple:

Point d'entrée: Flask Run

Commandes de compose docker

Après avoir créé un fichier docker-compose, vous devez exécuter certaines commandes pour obtenir de la composition pour travailler. Dans cette section, vous découvrirez certaines commandes de composition docker majeures. Ils sont:

  • Secouer docker
  • Docker-compose
  • Démarrage de la compose docker
  • Arrêt de compose docker
  • Pause Docker-Compose
  • Docker-compose inébranlable
  • Docker-compose ps

Secouer docker

Cette commande docker-compose aide à construire l'image, puis crée et démarre des conteneurs Docker. Les conteneurs proviennent des services spécifiés dans le fichier de composition. Si les conteneurs sont déjà en cours d'exécution et que vous exécutez Docker-Compose, il recrée le conteneur. La commande est:

secouer docker

Démarrage de la compose docker

Cette commande docker-compose démarre des conteneurs Docker, mais il ne construit pas d'images ou ne crée pas de conteneurs. Donc ça commence les conteneurs que s'ils ont été créés avant.

Arrêt de compose docker

Vous aurez souvent besoin d'arrêter les conteneurs après les avoir créés et les démarrer. Voici où la commande d'arrêt Docker-Compose est utile. Cette commande arrête essentiellement les services en cours d'exécution, mais les conteneurs et les réseaux de configuration restent intacts.
La commande est:

arrêt de compose docker

Docker-compose

La commande docker-compose down arrête également les conteneurs docker comme le fait la commande stop. Mais ça fait un effort supplémentaire. Docker-compose vers le bas, n'arrête pas seulement les conteneurs, il les supprime également. Les réseaux, les volumes et les images Docker réelles peuvent également être supprimées si vous utilisez certains arguments. La commande est:

docker-compose

Si vous avez l'intention de supprimer les volumes, vous spécifiez en ajoutant des volumes. Par exemple:

docker-compose down - volumes

Si vous avez l'intention de supprimer des images, vous spécifiez en ajoutant -rmi all ou -RMI local. Par exemple:

docker-compose down --rmi all
docker-compose down - rmi local

tous fait en sorte que Docker Compose supprime toutes les images, et local fait que Docker Compose supprime uniquement les images sans un étiquette personnalisée définie par le champ «Image».

Pause Docker-Compose

Il y a des scénarios où vous devez suspendre un conteneur, sans le tuer ni le supprimer. Vous pouvez y parvenir avec la commande Docker-Compose Pause. Cela fait une pause des activités de ce conteneur, afin que vous puissiez les reprendre lorsque vous voulez. La commande est:

Pause Docker-Compose

Docker-compose inébranlable

Le Docker-Compose est l'opposé de la commande Docker-Compose Pause. Vous pouvez l'utiliser pour reprendre les processus en suspension à la suite de l'utilisation de la pause Docker-Compose. La commande est:

docker-compose inébranlable

Docker-compose ps

Docker-Compose PS répertorie tous les conteneurs créés à partir des services du fichier docker-compose. C'est similaire à docker ps qui répertorie tous les conteneurs en cours d'exécution sur l'hôte docker. Cependant, Docker-Compose PS est spécifique aux conteneurs du fichier Docker Compose. La commande est:

docker-compose ps

Rassembler tout cela

Maintenant que vous avez vu certains des concepts clés derrière un fichier Docker Compose, réunissons tout. Vous trouverez ci-dessous un exemple de fichier Docker-Compose pour une application Web Python Django. Vous verrez une ventilation de chaque ligne de ce fichier et voyez ce qu'ils font.

Version: '3'
prestations de service:
DB:
Image: Postgres
la toile:
construire: .
Commande: Python Gérer.Py Runserver 0.0.0.0: 8000
Volumes:
- .:/code
PORTS:
- "8000: 8000"
dépend de:
- db

La nouvelle est qu'avec ce fichier docker-compose, une base de données Postgresql est créée et un serveur Django est démarré.

La longue histoire est:

  1. Ce fichier utilise la version 3 de Docker-Compose.
  2. Il crée deux services. Les services de base de données et de web.
  3. Le service DB utilise l'image officielle Docker Postgres.
  4. Le service Web construit sa propre image à partir du répertoire actuel. Puisqu'il ne définit pas le contexte et les clés Dockerfile, Dockerfile devrait être nommé «dockerfile» par convention.
  5. La commande qui s'exécutera après le démarrage du conteneur est définie.
  6. Le volume et les ports sont définis. Les deux utilisent la convention de l'hôte: cartographie des conteneurs.
  7. Pour le volume, le répertoire actuel «."Est mappé au répertoire" / code "à l'intérieur du conteneur. Cela aide les données du conteneur à devenir persistantes, donc elle n'est pas perdue à chaque fois que le conteneur commence.
  8. Pour le port, le port 8000 de l'hôte est mappé au port 8000 du conteneur. Notez que l'application Web s'exécute sur le port 8000. Par conséquent, l'application Web est accessible sur l'hôte via ce port.
  9. Enfin, le service Web dépend du service DB. Par conséquent, le service Web ne commencera que lorsque le conteneur DB a commencé.
  10. En savoir plus sur le Dockerfile pour l'application Django et le fichier Docker Compose peut être obtenu à partir de la documentation.

Conclusion

Vous n'avez pas besoin d'être un expert avec Docker pour utiliser Docker Compose. En tant que débutant qui n'a pas l'intention de maîtriser cet outil, il est bien d'apprendre ce dont vous avez besoin seul. Dans cet article, vous avez appris les bases de Docker Compose. Maintenant, vous comprenez pourquoi Docker Compose est nécessaire, les mauvaises comparaisons, comment configurer un fichier Docker Compose Config et les commandes également. C'est excitant de connaître ces choses, mais la vraie joie vient de les mettre à la pratique. Il est temps de se rendre au travail.