编程知识 cdmana.com

Composition des dockers

Docker Compose Capable de Docker Sur le noeud,En mode monomoteur(Single-Engine Mode)Déploiement et gestion d'applications multi - conteneurs.

La plupart des applications modernes fonctionnent en synergie avec plusieurs services plus petits pour former une application entièrement utilisable.Par exemple, un exemple simple d'application pourrait être 4 Composition des services.

    WebFront End.
    Gestion des commandes.
    Gestion des catégories.
    Base de données de fond.
Organiser les services ci - dessus,Est une application disponible.

Il est difficile de déployer et de gérer une grande variété de services,C'est exactement ça. Docker Compose Problèmes à résoudre.

Docker Compose Pas à travers des scripts et toutes sortes de verbosités docker Commande pour organiser les composants de l'application,.Au lieu de cela, décrivez l'application entière à travers un profil déclaratif,Pour compléter le déploiement avec une seule commande.

Une fois l'application déployée avec succès,La gestion de son cycle complet de déclaration peut également être réalisée par une série de commandes simples.Les profils peuvent également être stockés et gérés dans un système de contrôle de version.
Docker Compose Contexte
Docker Compose Son prédécesseur était Fig.Fig C'est un Orchard Outils puissants développés par l'entreprise,À l'époque, c'était la meilleure solution pour gérer plusieurs conteneurs.Fig Est basé sur Docker De Python Outils,Permet aux utilisateurs de se baser sur un YAML Définition du fichier application Multi - conteneurs,Pour pouvoir utiliser fig Outils en ligne de commande pour le déploiement des applications.Fig Vous pouvez également gérer tout le cycle de vie de votre application.Mise en œuvre interne,Fig Va analyser YAML Documentation,Et à travers Docker API Déploiement et gestion des applications .

In 2014 Année,Docker La société a acquis Orchard Entreprises,Et va Fig Renommé Docker Compose. Les outils en ligne de commande sont également disponibles à partir de fig Renommé docker-compose, Et est devenu depuis lié à Docker Outils externes au - dessus du moteur .

Bien qu'il n'ait jamais été entièrement intégré Docker Dans le moteur, Mais il est encore largement préoccupé et largement utilisé .

Jusqu'à aujourd'hui,Docker Compose Est toujours un besoin dans Docker À l'extérieur de l'hôte pour l'installation Python Outils.

Quand vous l'utilisez, Écrivez d'abord pour définir plusieurs conteneurs (Services multiples)Application YAML Documentation, Et le remettre à docker-compose Traitement des commandes,Docker Compose Serait basé sur Docker Moteur API Terminer le déploiement de l'application .

Docker ComposeInLinuxInstallation

In Linux Installation supérieure Docker ComposeEn deux étapes.

Utilisez d'abord curl Commande pour télécharger des binaires ,Ensuite, utilisez chmod La commande le rend opérationnel .

Docker Compose In Linux Utilisation sur, Il est également nécessaire d'installer d'abord Docker Moteur.

Les commandes suivantes sont téléchargées 1.24.1 Version Docker Compose À //usr/local/bin/docker-compose.S'il vous plaît. GitHub Rechercher la version que vous souhaitez installer sur (https://github.com/docker/compose/releases),Et remplacer URL Dans 1.24.1.

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose


Télécharger docker-compose Après les binaires , Rendre exécutable en utilisant la commande suivante .

sudo chmod +x /usr/local/bin/docker-compose
Vérifier l'installation et la version .

$ docker-compose --version

On peut le faire maintenant Linux Utilisation sur Docker Compose C'est. Une erreur a été signalée lors de la première installation pour voir la version dans la figure ci - dessus , C'est parce qu'il n'y a pas de téléchargement complet , Après avoir réutilisé la commande de téléchargement , Exécuter à nouveau la commande d'installation a réussi .

yml Profil et instructions communes Introduction

Docker Compose Utiliser YAML Fichier pour définir les applications multiservices .YAML - Oui. JSON Un sous - ensemble de,Donc vous pouvez aussi utiliser JSON.Docker Compose Nom de fichier par défaut docker-compose.yml.Peut également être utilisé -f Parameter specific file .

Voici un exemple simple Compose Exemple de fichier, Il définit un service qui comprend deux services (web-fe Et redis)Petit Flask Application. Il est possible de compter les visiteurs et de les enregistrer à Redis Simple Web Services.

version: "3.5"
services:
web-fe:
build: .
command: python app.py
ports:
- target: 5000
published: 5000
networks:
- counter-net
volumes:
- type: volume
source: counter-vol
target: /code
redis:
image: "redis:alpine"
networks:
counter-net:

networks:
counter-net:

volumes:
counter-vol:

Un aperçu de la structure de base du document avant d'aller plus loin , On peut d'abord remarquer ,Il contient: 4 Niveau 1 key:version、services、networks、volumes.

version Doit être spécifié,Et toujours à la première ligne du fichier.Il définit Compose Format du fichier(Surtout API)Version de.

    Attention!,version Pas défini Docker Compose Ou Docker Numéro de version du moteur .

Dans l'exemple Compose Le fichier utilisera la version 3 Et plus.

services Utilisé pour définir différents services d'application. L'exemple ci - dessus définit deux services :Un nommé web-fe De Web Services de première ligne et un redis Service de base de données de mémoire pour .Docker Compose Chaque service est déployé dans son propre conteneur .

networks Pour guider Docker Créer un nouveau réseau.Par défaut,Docker Compose Sera créé bridge Réseau.C'est un réseau mono - hôte,Seule la connexion des conteneurs sur le même hôte peut être réalisée.Bien sûr.,Peut également être utilisé driver Propriétés pour spécifier différents types de réseaux.

Le code suivant peut être utilisé pour créer un over-net De Overlay Réseau, Autoriser les contenants séparés (standalone container)Connexion(attachable) Sur ce réseau .

networks:
over-net:
driver: overlay
attachable: true

volumes Pour guider Docker Pour créer un nouveau volume .

Dans l'exemple ci - dessus Compose Le fichier utilise v3.5 Format de la version, Deux services sont définis ,Un nommé counter-net Et un réseau appelé counter-vol Le volume de.

Plus d'informations sur services Moyenne, Analyse détaillée ci - dessous .

Compose Dans le fichier services Deux niveaux secondaires sont définis en partie key:web-fe Et redis.

Ils définissent chacun un service d'application .Ce qui doit être clair,Docker Compose Chaque service sera déployé en tant que conteneur ,Et utilisera key Comme partie du nom du contenant .

Dans cet exemple, deux key:web-fe Et redis.Donc, Docker Compose Deux conteneurs seront déployés , Le nom d'un contenant contiendra web-fe, Et l'autre contiendra redis.

web-fe Dans la définition de service pour , Contient les instructions suivantes .
1) build
Désignation Docker Basé sur le répertoire actuel(.)En bas. Dockerfile Instructions définies dans pour construire un nouveau miroir.Le miroir sera utilisé pour démarrer le conteneur du service.
2) command
python app.py Désignation Docker Exécuter dans un conteneur nommé app.py De Python Script comme programme principal . Le miroir doit donc contenir app.py Documentation et Python,C'est ce que Dockerfile Peut être satisfait .
3) ports
Désignation Docker Dans le récipient(-target)De 5000 Port mapped to host(published)De 5000 Port. Cela signifie envoyer à Docker Hôte 5000 Le trafic du port est acheminé vers le conteneur 5000 Port. Port d'écoute de l'application dans le conteneur 5000.
4) networks
De faire Docker Le service peut être connecté au réseau spécifié.Ce réseau devrait déjà exister,Ou dans networks Niveau 1 key Réseau tel que défini dans.Pour Overlay Sur Internet, Il faut aussi définir un attachable Le logo, Pour qu'un conteneur séparé puisse être connecté (À ce moment - là, Docker Compose Un conteneur autonome sera déployé au lieu de Docker Services).
5) volumes
Désignation Docker Oui. counter-vol Vol.(source:)Monté dans un conteneur /code(target:).counter-vol Le volume doit déjà exister , Ou sous le dossier volumes Niveau 1 key Défini dans.

En résumé.,Docker Compose Appelle Docker Viens. web-fe Le Service déploie un conteneur séparé . Ce conteneur est basé sur Compose Les fichiers se trouvent dans le même répertoire Dockerfile Miroir construit.

Le conteneur qui démarre à partir de ce miroir s'exécute app.py En tant que programme principal ,Oui. 5000 Port exposé à l'hôte hôte hôte,Connectez - vous à counter-net Sur le Web, Et monter un volume à /code.

Techniquement parlant,, Cet exemple n'a pas besoin d'être configuré command: python app.py. Parce que le miroir Dockerfile Déjà python app.py Défini comme initiateur par défaut .Mais, Cet exemple vise principalement à montrer comment il est exécuté , Il peut donc également être utilisé pour couvrir Dockerfile Configuré dans CMD Directives.

redis La définition du service est relativement simple .
6) image
redis:alpine De faire Docker Peut être basé sur redis:alpine Le miroir démarre un nom indépendant appelé redis Conteneur pour. Ce miroir sera Docker Hub Tirez vers le haut et vers le bas .
7) networks
Configuration redis Conteneur connecté à counter-net Réseau.

Puisque les deux services sont connectés à counter-net Réseau, Ils peuvent donc être résolus par nom à l'adresse de l'autre . Il est important de comprendre cela , Dans cet exemple, l'application de niveau supérieur est configurée pour passer par le nom et Redis Communications de service.

Selondocker-compose Application de déploiement de fichiers

Ce qui suit sera effectivement déployé Compose Application définie dans le fichier . Peut être obtenu à partir de mon disque réseau Baidu (https://pan.baidu.com/s/1Q0tcQnSqUQ06rfEdH_MBaw Code d'extraction: a55v) Télécharger les fichiers requis .

Télécharger le Code localement , Et se déployer dans une nouvelle création appelée counter-app Dans le catalogue de.

Ce répertoire contient tous les fichiers requis , Peut être utilisé comme contexte de construction .

Cet article met les fichiers téléchargés dans le répertoire principal .

Docker Compose Utilise le nom du Répertoire (counter-app) Comme nom du projet , C'est ce qu'on verra plus loin ,Docker Compose Préfixe tous les noms de ressources counter-app_.

Entrée counter-app Dans la table des matières,Vérifier si le fichier existe.

Une brève introduction à ces documents .

    app.py: C'est le Code d'application (Un Python Flask Application).
    docker-compose.yml:- Oui. Compose Documentation,Qui définit Docker Comment déployer une application .
    Dockerfile:Définit comment construire web-fe Miroir utilisé par le service .
    requirements.txt: Liste des Python Sac.

app.py C'est évidemment le document de base de l'application ,Et docker-compose.yml Le fichier organise tous les composants de l'application .

Utiliser ci - dessous Docker Compose Démarrer l'application . Toutes les commandes suivantes sont en cours de création counter-app Sous la table des matières.

$ docker-compose up &

Souvent utilisé pour démarrer un Compose Application(Adoption Compose L'application Multi - conteneurs définie par le fichier est appelée “Compose Application”)La façon de docker-compose up Les ordres. Il va construire l'image désirée , Créer des réseaux et des volumes ,Et démarrer le conteneur.Par défaut,docker-compose up Recherche le nom docker-compose.yml Ou docker-compose.yaml De Compose Documentation.Si Compose Le fichier est un autre nom de fichier ,Pour passer -f Paramètres à spécifier.

La commande suivante est basée sur le nom prod-equus-bass.yml De Compose Application de déploiement de fichiers .

$ docker-compose -f prod-equus-bass.yml up

Utiliser -d Les paramètres sont également couramment utilisés pour démarrer une application en arrière - plan

docker-compose up -d

Ou

docker-compose -f prod-equus-bass.yml up -d

L'exemple de commande précédent démarre l'application au premier plan (Non utilisé -d Paramètres),Mais en utilisant & Renvoie la fenêtre du terminal à .

De cette façon, l'application est construite et lancée ,Peut être utilisé directement docker Commandes pour voir Docker Compose Miroir créé、Conteneur、Réseaux et volumes.

$ docker image ls

Vous pouvez voir qu'il y a 3 Miroirs construits ou tirés pendant le déploiement .

counterapp_web-fe:latest Le miroir provient de docker-compose.yml Dans le fichier build: . Directives. La directive laisse Docker Basé sur Dockerfile Pour construire un nouveau miroir .Le miroir est basé sur python:3.4-alpine Construire,Il contient Python Flask Web Code du programme appliqué . Pour plus d'informations, voir Dockerfile Pour en savoir plus .

    FROM python:3.4-alpine << Miroir de base
    ADD . /code << Oui.appCopier dans le miroir
    WORKDIR /code << Définir le Répertoire de travail
    RUN pip install -r requirements.txt << Dépendances d'installation
    CMD ["python", "app.py"] << Définir la commande de démarrage par défaut

Pour faciliter la compréhension, Chaque ligne est annotée . Supprimer lors du déploiement .

Votre attention, s'il vous plaît.,Docker Compose Le nom du projet sera (counter-app)Et Compose Nom de la ressource définie dans le fichier (web-fe)Connectez - vous, Le nom du miroir nouvellement construit .

Docker Compose Les noms de toutes les ressources déployées suivent cette spécification .

Parce que Compose Document .Services.redis Spécifié dans l'article image: "redis:alpine", Donc ça va passer de Docker Hub Tirez! redis:alpine Miroir.

La commande suivante énumère deux conteneurs . Le nom de chaque conteneur est le nom du projet (Nom du Répertoire)Préfixe.En outre, Ils sont également suffixés par un nombre pour identifier le numéro de série de l'Instance conteneur ,Parce que Docker Compose Capacité d'expansion admissible . 

counterapp_web-fe Le conteneur fonctionne avec l'application Web Front End. Et ce qui se passe, c'est que app.py, Et est cartographié à Docker L'hôte 5000 Port, La connexion se fera plus tard .

La liste des réseaux et volumes ci - dessous montre le nom counterapp_counter-net Le réseau de counterapp_counter-vol Le volume de.

Une fois l'application déployée avec succès,Ça marche Docker Connexion du navigateur à l'hôte 5000 Port pour voir l'effet de fonctionnement de l'application ,Comme le montre la figure ci - dessous.

Cliquez sur le bouton rafraîchir de votre navigateur , Le nombre va augmenter .

Si vous utilisez & Lancement de l'application, Vous pouvez alors voir dans la fenêtre du terminal que contient HTTP Code de réponse 200 Journal de bord. Cela indique que la demande a reçu la bonne réponse , Chaque fois qu'une page est chargée, un journal est imprimé .

Ici, Les applications multi - conteneurs ont été rendues possibles par Docker Compose Déploiement réussi.

Utiliserdocker-compose Application de gestion des sous - commandes

Voici comment utiliser Docker Compose Démarrage、 Arrêter et supprimer les applications , Et obtenir l'état de l'application . Il montre également comment utiliser les volumes montés pour implémenter des paires Web Mise à jour du Front End .

Maintenant que l'application a commencé , Voici comment l'arrêter .Pour y parvenir,, Sous - commande up Remplacer par down C'est tout..

Parce qu'il est utilisé & Applications lancées , Donc il fonctionne à la réception . Cela signifie que la sortie détaillée sera imprimée sur le terminal , Afin de bien comprendre le processus d'exécution . Voici ce que chaque ligne signifie .

No 1、2 La ligne commence à essayer de fermer les deux services ,C'est - à - dire: Compose Défini dans le fichier web-fe Et redis.Par 3 Oui. stop Les instructions sont envoyées SIGTERM Signal. Le signal est envoyé à chaque conteneur PID Pour 1 Processus.No 4~6 Affichage des lignes Redis Le récipient se ferme gracieusement après avoir reçu le signal .No 7、8 La ligne indique que l'arrêt a été réussi Redis.No 9 Indication de ligne web-fe Le Service a également été interrompu avec succès .Par 10 Et 11 La ligne indique que le service arrêté a été supprimé .No 12 Affichage des lignes counter-net Réseau supprimé ,No 13 Affichage des lignes docker-compose up Sortie du processus.

Ce qui mérite une attention particulière,counter-vol Le volume n'a pas été supprimé , Parce que le volume devrait être utilisé pour le stockage persistant à long terme des données .Donc,, Le cycle de vie du volume est complètement découplé du conteneur correspondant .Mise en œuvre docker volume ls Vous pouvez voir que le volume existe toujours dans le système . Toutes les données écrites sur le volume sont sauvegardées .

Encore une fois,Mise en œuvre docker-compose up Les miroirs tirés ou construits pendant le processus restent également dans le système .Donc,, Il sera plus rapide de déployer à nouveau l'application .

Voici quelques autres docker-compose Sous - commande. Redémarrez l'application en utilisant la commande suivante , Mais cette fois, démarrez - le en arrière - plan .

$ docker-compose up -d

Il se trouve que ce démarrage est beaucoup plus rapide ——Parce que counter-vol Le volume existe déjà , Et pas besoin de tirer et de construire des miroirs .

Utiliser docker-compose ps Commande pour voir l'état de l'application. 

Le nom du conteneur est affiché dans la sortie、Où se déroule Command、L'état actuel et le port réseau sur lequel il écoute.

Utiliser docker-compose top La commande énumère les services individuels(Conteneur)Processus en cours.

Parmi eux PID Le numéro est Docker Sur l'hôte(Pas dans le conteneur)Processus ID.

docker-compose stop La commande arrête l'application ,Mais les ressources ne sont pas supprimées.Et on recommence docker-compose ps Voir l'état.

Je vois.,Arrêtez! Compose Application ne supprime pas la définition de l'application dans le système , Et arrêter seulement le conteneur appliqué .Ceci peut être utilisé docker container ls -a Commande de validation.

Pour les Compose Application,Peut être utilisé docker-compose rm Commande pour supprimer.Cela supprimera les conteneurs et les réseaux liés à l'application,Mais les volumes et les miroirs ne sont pas supprimés.

Bien sûr., Ni supprimer le code source de l'application (Sous le répertoire des projets app.py、Dockerfile、requirements.txt Et docker-compose.yml).

Mise en œuvre docker-compose restart Commande redémarrer l'application .

Utiliser docker-compose down Cette commande arrête et ferme l'application.

Application supprimée,Il ne reste que le miroir、Volume et source. Voici la dernière application déployée , Puis regardez l'état du volume .

Voir Compose Les fichiers trouveront, Il définit un nom counter-vol Nouveau volume de ,Et le monter à web-fe Services /code Sur le chemin.

La première fois que l'application est déployée ,Docker Compose Vérifiez si un volume avec le même nom existe .S'il n'existe pas,Il est créé.Peut également être utilisé docker volume ls Commande vue manuelle .

Docker Compose Les réseaux et les volumes sont créés avant le déploiement des services .C'est logique., Parce qu'ils sont pour le service (Conteneur) Ressources de base sous - jacentes utilisées .Docker Compose Crée d'abord le réseau et le volume ( Même avant de construire et de tirer des miroirs ). Voir les commandes exécutées docker-compose up -d Comme le montre l'image suivante :

Creating network "counter-app_counter-net" with the default driver

Etudiez encore Dockerfile À propos de web-fe Définition des services, Vous verrez qu'il va rouler counter-app Monté sur le conteneur /code Table des matières.Et nous découvrirons,/code C'est le Répertoire dans lequel l'application est installée et exécutée .C'est ce que je vois., Le Code appliqué est situé à Docker Dans le volume ,Comme le montre la figure ci - dessous.

In Docker Modifications apportées par l'hôte aux fichiers du volume , Il réagira immédiatement à l'application .Vérifiez ci - dessous.

Le processus de validation spécifique comporte plusieurs étapes . Modifier d'abord dans le répertoire des projets app.py Documentation, Ainsi, la page appliquée dans le navigateur affichera un texte différent . Puis copiez le fichier mis à jour à Docker Dans le volume de l'hôte . Dernier rafraîchissement appliqué Web Page pour voir le contenu de la mise à jour .

Toutes les paires sont situées à Docker Les modifications apportées au contenu d'un volume sur l'hôte sont immédiatement reflétées dans le volume dans le conteneur .

Utilisez un éditeur de texte facile pour modifier app.py Documentation,Ce qui est utilisé ici est vim.

$ vim ~/counter-app/app.py

Modifier le paragraphe 22 Texte avec ligne entre guillemets doubles . Cette ligne est "What's up..." C'est parti., Vous pouvez saisir du texte à volonté en guillemets doubles et enregistrer .Si elle n'est pas installéevimÀ utilisersudo apt install vim Commande pour installer,Entrez plus tard.vimÉditeur,Appuyez suri Entrez le mode Insertion - modification , Après avoir trouvé le changement de position ,Appuyez surescClé,Entrée:wq Entrée pour enregistrer la sortie .

Après la mise à jour du code source ,Copier vers Docker Dans le volume correspondant sur l'hôte , C'est - à - dire le point de montage copié dans un ou plusieurs conteneurs (Mount Point)Moyenne.

Utiliser docker volume inspect La commande peut voir le volume à Docker Où est l'hôte .

$ docker volume inspect counterapp_counter-vol | grep Mount

Après avoir copié le fichier , Le fichier apparaîtra dans web-fe Du conteneur /code Moyenne, Recouvrir le contenant de /code/app.py Documentation.

$ cp ~/counterapp/app.py \
/var/lib/docker/volumes/counterapp_counter-vol/_data/app.py

Mise à jour app.py Le fichier est déjà dans le conteneur .Via le navigateur Docker L'hôte IP Et les ports 5000 Connectez - vous à l'application pour voir le contenu mis à jour .

Commandes courantes

 1) docker-compose up
Pour déployer un Compose Application. Par défaut, la commande est lue avec le nom docker-compose.yml Ou docker-compose.yaml Documents. Bien sûr, les utilisateurs peuvent également utiliser -f Spécifiez un nom de fichier différent .En général,Sera utilisé -d .Parameter Order application started in the Background .
2) docker-compose stop
Arrêtez! Compose Tous les conteneurs associés à l'application , Mais ils ne seront pas supprimés . Les applications qui ont été arrêtées peuvent facilement passer par docker-compose restart Redémarrage de la commande.
3) docker-compose rm
Utilisé pour supprimer les Compose Application. Il supprimera le conteneur et le réseau ,Mais les volumes et les miroirs ne sont pas supprimés.
4) docker-compose restart
Redémarrer arrêté Compose Application. Si l'utilisateur a modifié l'application après l'avoir arrêtée , Le contenu du changement ne sera donc pas reflété dans l'application redémarrée , Vous devrez alors redéployer l'application pour que le changement prenne effet .
5) docker-compose ps
Pour lister Compose Conteneurs individuels dans l'application . La sortie comprend l'état actuel 、 Les commandes que le conteneur exécute et les ports réseau .
6) docker-compose down
Arrêter et supprimer les Compose Application. Il supprimera le conteneur et le réseau ,Mais les volumes et les miroirs ne sont pas supprimés.

版权声明
本文为[Petit, York?]所创,转载请带上原文链接,感谢
https://cdmana.com/2022/01/202201080556241184.html

Scroll to Top