编程知识 cdmana.com

Miroir docker

En tant que chercheur,Le miroir peut être interprété comme une classe(Class).

Vous devez d'abord retirer le miroir du Service d'entrepôt miroir.Les services courants d'entrepôt miroir sont Docker Hub.L'opération pull télécharge l'image localement Docker Hôte,Vous pouvez utiliser ce miroir pour démarrer un ou plusieurs conteneurs.

Le miroir se compose de plusieurs couches,Après chaque superposition,C'est comme un objet indépendant de l'extérieur.L'intérieur du miroir est un système d'exploitation mince(OS),Contient également les fichiers et les paquets de dépendance nécessaires à l'exécution de l'application.

Parce que le conteneur a été conçu pour être rapide et petit,Donc les miroirs sont généralement plus petits.

Le miroir a été mentionné plusieurs fois auparavant comme un conteneur qui s'arrête(Catégorie).Vous pouvez arrêter le fonctionnement d'un conteneur,Et créer un nouveau miroir à partir de.

Dans ces conditions,,Le miroir peut être interprété comme une sorte de construction(build-time)Structure,Et un conteneur peut être interprété comme un temps d'exécution(run-time)Structure,Comme le montre la figure ci - dessous.

Miroir et conteneur
La figure ci - dessus montre la relation entre le miroir et le conteneur au niveau de la conception de haut niveau.Généralement utilisédocker container runEtdocker service createCommande pour démarrer un ou plusieurs conteneurs à partir d'un miroir.

Une fois que le conteneur a démarré à partir du miroir,Les deux deviennent interdépendants,Et avant que tous les conteneurs commencés sur le miroir s'arrêtent,Le miroir ne peut pas être supprimé.Essayez de supprimer le miroir sans arrêter ou détruire le conteneur qui l'utilise,Peut causer des erreurs.
Les miroirs sont généralement plus petits
Le but d'un conteneur est d'exécuter une application ou un service , Le miroir du conteneur doit contenir l'application / Système d'exploitation et fichiers d'application nécessaires au fonctionnement du service . Les contenants sont à la fois rapides et compacts , Lors de la construction d'un miroir, il est souvent nécessaire de couper les parties inutiles , Maintenir un volume plus petit .

Par exemple,Docker Les miroirs ne contiennent généralement pas 6 Un autre. Shell Laissez le lecteur choisir ——En général Docker Il n'y a qu'une mince Shell,Même pas. Shell.

Le miroir ne contient pas encore de noyau —— Les conteneurs sont partagés Docker Le noyau de l'hôte.On dit parfois que le conteneur ne contient que les systèmes d'exploitation nécessaires(En général, seuls les fichiers du système d'exploitation et les objets du système de fichiers).

    Conseils:Hyper-V Le conteneur fonctionne dans un poids léger dédié VM Allez.,Utilisation simultanée VM Noyau interne du système d'exploitation .

Docker Miroir officiel Alpine Linux Environ 4MB,On peut dire que oui. Docker Un exemple typique de la caractéristique de la petite taille miroir .

Mais, L'état le plus courant du miroir est comme Ubuntu Official Docker Miroir général ,Environ 110MB. La plupart de ces miroirs ont été coupés de leur contenu inutile .

Windows Le miroir est plus Linux Le miroir est plus grand ,Ceci est lié à Windows OS Le principe de fonctionnement est pertinent .Par exemple,, Dernière mise à jour non compressée Microsoft .NET Miroir(microsoft/dotnet:latest)Plus que 1.7GB.Windows Server 2016 Nano Server Miroir(microsoft/nanoserver:latest) Après extraction et décompression , Son volume est légèrement supérieur à 1GB.

Extraire le miroir
Docker Après l'installation de l'hôte , Il n'y a pas de miroir local .

docker image pull C'est la commande pour télécharger le miroir . Le miroir est téléchargé à partir de l'entrepôt du Service d'entrepôt miroir distant .

Par défaut, Le miroir va partir de Docker Hub Dans l'entrepôt de .docker image pull alpine:latest Les commandes seront exécutées à partir de Docker Hub De alpine Retirer l'étiquette de l'entrepôt comme latest Miroir de.

Linux Docker L'entrepôt miroir local de l'hôte est généralement situé à /var/lib/docker/<storage-driver>,Windows Docker L'hôte est C:\ProgramData\docker\windowsfilter.

La commande suivante peut être utilisée pour vérifier Docker Y a - t - il un miroir dans l'entrepôt local de l'hôte .

$ docker image ls

Prendre le miroir à Docker L'opération locale de l'hôte est pull .Si vous voulez Docker L'hôte utilise la dernière Ubuntu Miroir, Il faut le tirer . Le miroir peut être tiré localement par la commande suivante , Et observez sa taille .

$ docker image pull ubuntu:latest

    Conseils:Si vous utilisez Linux, Et l'utilisateur actuel n'a pas été ajouté localement Docker UNIX Dans le Groupe, Vous devrez ajouter sudo.

Service d'entrepôt miroir
Docker Le miroir est stocké dans le Service d'entrepôt miroir (Image Registry)Milieu.

Docker Le Service d'entrepôt miroir du client est configurable ,Utilisation par défaut Docker Hub.

Le Service d'entrepôt miroir contient plusieurs entrepôts miroir (Image Repository). Un entrepôt de miroirs peut contenir plusieurs miroirs .

Le diagramme ci - dessous montre l'inclusion de 3 Services d'entrepôts miroirs pour les entrepôts miroirs , Chaque magasin de miroirs contient un ou plusieurs miroirs .

Docker Hub Il est également divisé en entrepôts officiels (Official Repository) Et les entrepôts non officiels (Unofficial Repository).

Les miroirs de l'entrepôt officiel sont Docker Examen de la société , Les miroirs seront mis à jour à temps , Composé de codes de haute qualité , Ces codes sont sécurisés , Il existe une documentation complète et des pratiques exemplaires .

L'entrepôt non officiel ressemble plus à Jianghu xiake , Les miroirs ne présentent pas nécessairement les avantages d'un entrepôt officiel , Mais cela ne veut pas dire que tous les entrepôts non officiels sont mauvais ! Il y a aussi d'excellents miroirs dans les entrepôts non officiels .

Nous devons être prudents avant de faire confiance au Code miroir de l'entrepôt non officiel . Avant d'utiliser un logiciel téléchargé à partir d'Internet , Faites attention , Même lorsque vous utilisez des images d'un entrepôt officiel .

La plupart des systèmes d'exploitation et des applications populaires sont Docker Hub Il y a des miroirs dans les entrepôts officiels de . Ces miroirs sont faciles à trouver ,En gros. Docker Hub Haut niveau de l'espace de noms .

Nom et étiquette du miroir
Il suffit de donner le nom et l'étiquette du miroir , Pour localiser un miroir dans l'entrepôt officiel (Adoption“:”Séparation). Lors de l'extraction du miroir de l'entrepôt officiel ,docker image pull Le format de la commande est le suivant:.

docker image pull <repository>:<tag>
Avant Linux Dans l'exemple, Ceci est fait par les deux commandes suivantes Alpine Et Ubuntu Retrait du miroir.

docker image pull alpine:latest
docker image pull ubuntu:latest
Ces deux ordres vont de alpine Et ubuntu L'entrepôt a ramassé l'étiquette “latest” Miroir de l'étiquette .

Voici comment extraire différents miroirs de l'entrepôt officiel .

$ docker image pull mongo:3.3.11
// L'ordre sera donné à partir de Mongo Kura a pris l'étiquette comme 3.3.11Miroir de

$ docker image pull redis:latest
// L'ordre sera donné à partir de Redis Kura a pris l'étiquette comme latestMiroir de

$ docker image pull alpine
// L'ordre sera donné à partir de Alpine Kura a pris l'étiquette comme latestMiroir de
En ce qui concerne l'ordre ci - dessus ,Il convient de noter ce qui suit:.

Tout d'abord,, Si aucune étiquette miroir spécifique n'est spécifiée après le nom de l'entrepôt ,Et Docker Supposons que l'utilisateur veuille tirer l'étiquette comme latest Miroir de.

Deuxièmement,,L'étiquette est latest Il n'y a pas de magie spéciale dans le miroir de !Marqué latest Le miroir de l'étiquette ne garantit pas qu'il s'agit du dernier miroir de l'entrepôt !Par exemple,Alpine Les images les plus récentes dans l'entrepôt sont généralement étiquetées edge.En général,,Utiliser latest Il faut faire preuve de prudence dans l'étiquetage !

Il en va de même pour extraire des miroirs d'un entrepôt non officiel , Il suffit d'ajouter Docker Hub Nom d'utilisateur ou d'organisation de .

Voici un exemple de la façon de tu-demo Retrait dans l'entrepôt v2 Ce miroir, Où le propriétaire du miroir est Docker Hub Comptes nigelpoulton, Un compte qui ne devrait pas être fiable .

$ docker image pull nigelpoulton/tu-demo:v2
// L'ordre vient de mon propre Docker Hub Le compte est dans l'espace de noms tu-demo L'étiquette de téléchargement dans la bibliothèque est v2 Miroir de

Si vous souhaitez obtenir des miroirs du Service d'entrepôt de miroirs tiers (Non Docker Hub), Le nom de l'entrepôt miroir doit être précédé du nom de l'entrepôt miroir. DNS Nom.

Supposons que le miroir de l'exemple ci - dessus se trouve à Google Service d'entrepôt miroir de conteneur(GCR)Moyenne, Le nom de l'entrepôt doit être précédé de gcr.io,Par exemple: docker pull gcr.io/nigelpoulton/tu-demo:v2( Cet entrepôt et ce miroir n'existent pas ).

Vous pourriez avoir besoin d'un compte avec un service d'entrepôt miroir tiers , Et terminer la connexion avant de tirer le miroir .

Étiquetage multiple du miroir
Il y a une chose à dire sur le miroir , Un miroir peut être étiqueté en fonction des besoins de l'utilisateur . Ceci est dû au fait que l'étiquette est n'importe quel nombre ou chaîne stocké dans les métadonnées miroir .Voici quelques exemples.

In docker image pull Spécifié dans la commande -a Paramètres pour extraire tous les miroirs de l'entrepôt . Ensuite, vous pouvez exécuter docker image ls Voir les miroirs qui ont été tirés .

Si l'entrepôt de miroirs extrait contient des miroirs pour plusieurs plateformes ou schémas , Comme inclure Linux Et Windows Miroir de, Alors la commande pourrait échouer .

$ docker image pull -a nigelpoulton/tu-demo

Voici ce qui s'est passé .

Tout d'abord,,L'ordre vient de nigelpoulton/tu-demo L'entrepôt a pris 3 Miroirs:latest、v1 Et v2.

Deuxièmement,,Regarde. docker image ls Dans la sortie de commande IMAGE ID Cette colonne. Il n'y a que deux Image ID. C'est parce que seulement deux images ont été téléchargées , Deux de ces étiquettes pointent vers le même miroir .

En d'autres termes,, Un des miroirs a deux étiquettes .Si vous regardez attentivement, vous verrez v1 Et latest L'étiquette pointe vers le même IMAGE ID, Cela signifie que les deux étiquettes appartiennent au même miroir .

Cet exemple illustre parfaitement ce qui précède en ce qui concerne latest Avertissement pour l'utilisation de l'étiquette .latest L'étiquette pointe vers v1 Miroir de l'étiquette .Cela signifie latest Pointant vers la version antérieure des deux miroirs , Au lieu de la dernière version !latest C'est une étiquette non obligatoire , Il n'y a aucune garantie de pointer vers le dernier miroir dans l'entrepôt !

Filtration docker image ls La sortie de

Docker Offre --filter Paramètres pour filtrer docker image ls Contenu de la liste miroir retournée par la commande .

L'exemple suivant ne renvoie que le pendentif (dangling)Miroir.

$ docker image ls --filter dangling=true

Ces miroirs sans étiquette sont appelés miroirs suspendus , Afficher dans la liste comme <none>:<none>.

C'est souvent le cas., C'est parce qu'un nouveau miroir a été construit , Le miroir est ensuite étiqueté comme existant .

Quand ça arrive ,Docker Va construire un nouveau miroir , Et il s'avère qu'il y a déjà des miroirs avec la même étiquette ,Et voilà. Docker Supprime l'étiquette sur l'ancien miroir , Marquez l'étiquette sur le nouveau miroir .

Par exemple,D'abord basé sur alpine:3.4 Construire un nouveau miroir,Et frappe. dodge:challenger Étiquettes.Puis mise à jour Dockerfile,Oui. alpine:3.4 Remplacer par: alpine:3.5, Et encore une fois docker image build Les ordres, Cette commande va construire un nouveau miroir , Et l'étiquette est dodge:challenger, L'étiquette correspondante sur l'ancien miroir a également été enlevée , L'ancien miroir devient un miroir suspendu .

Peut passer docker image prune La commande supprime tous les miroirs virtuels suspendus .Si ajouté -a Paramètres,Docker Supprime en outre les miroirs qui ne sont pas utilisés ( Ces miroirs qui ne sont utilisés par aucun conteneur ).

Docker Les filtres suivants sont actuellement pris en charge .

    dangling:Peut spécifier true Ou false, Retourner seulement les miroirs suspendus (true), Ou un miroir virtuel non suspendu (false).
    before: Un nom miroir est requis ou ID Comme paramètre, Renvoie tous les miroirs créés précédemment .
    since:Avec before Similaire, Mais renvoie tous les miroirs créés après le miroir spécifié .
    label: Selon le marquage (label) Nom ou valeur de , Filtrer le miroir .docker image ls Le contenu de la dimension n'est pas affiché dans la sortie de commande .
D'autres méthodes de filtrage peuvent être utilisées reference.

Voici comment utiliser reference Compléter le filtrage et n'afficher que l'étiquette comme latest Exemple de.

$ docker image ls --filter=reference="*:latest"

Peut être utilisé --format Paramètres pour passer à travers Go Le modèle Formate la sortie . Les instructions suivantes ne renverront que Docker Propriétés de taille du miroir sur l'hôte .

$ docker image ls --format "{ {.Size}}"

Retourner toutes les images en utilisant la commande suivante , Mais ne montrer que l'entrepôt 、 Étiquettes et informations sur la taille .

$ docker image ls --format "{ {.Repository}}: { {.Tag}}: { {.Size}}"

Adoption CLI Recherche de mode Docker Hub
docker search La commande permet de passer par CLI Pour rechercher Docker Hub.Peut passer“NAME” Le contenu du champ correspond , Et filtré en fonction de la valeur de n'importe quelle colonne dans le contenu retourné .

En mode simple, Cette commande recherche tout “NAME” Entrepôt contenant une chaîne spécifique dans le champ . La commande suivante cherche tous les “NAME”Contient“nigelpoulton”Entrepôt.

$ docker search nigelpoulton

"NAME” Le champ est le nom de l'entrepôt ,Inclus Docker ID, Ou le nom de l'Organisation de l'entrepôt non officiel . La commande suivante énumère tous les noms d'entrepôt qui contiennent “alpine”Miroir de.

$ docker search alpine

Le miroir retourné ci - dessus contient à la fois officiel et non officiel ,Peut être utilisé --filter "is-official=true", Faire en sorte que le contenu retourné par la commande n'affiche que le miroir officiel .

Afficher uniquement les entrepôts créés automatiquement .$ docker search alpine --filter "is-automated=true"

À propos de docker search Le dernier point à noter est ,Par défaut,Docker Retour seulement 25 Résultat de la ligne.Vous pouvez spécifier --limit Paramètre pour augmenter le nombre de lignes de contenu retournées ,Max. 100 D'accord.

Miroir et stratification
Docker Le miroir se compose d'une couche de miroir en lecture seule faiblement couplée .Comme le montre la figure ci - dessous.

Docker Responsable de la pile de ces couches miroirs , Et les représenter comme un seul objet unifié .

La façon dont vous pouvez voir les niveaux de miroir docker image inspect Les ordres. Et là encore ubuntu:latest Exemple de miroir.

$ docker image inspect ubuntu:latest

docker history La commande affiche l'historique de construction du miroir , Ce n'est pas une stratification miroir au sens strict du terme .Certains Dockerfile L'instruction dans ne crée pas une nouvelle couche miroir .Par exemple, ENV、EXPOSE、CMD Et ENTRY- POINT.Mais, Ces commandes ajoutent des métadonnées au miroir .

Tous les Docker Les miroirs commencent tous par une couche miroir de base,Lorsque des modifications sont apportées ou que de nouveaux éléments sont ajoutés,Au - dessus de la couche miroir actuelle,Créer une nouvelle couche miroir.

Prenons un exemple simple,Si elle est basée sur Ubuntu Linux 16.04 Créer un nouveau miroir,C'est la première couche du nouveau miroir;Si vous ajoutez Python Sac,Une deuxième couche miroir est créée au - dessus de la couche miroir de base;Si vous continuez à ajouter un correctif de sécurité,Une troisième couche miroir est créée.

Le miroir contient déjà 3 Couches miroirs,Comme le montre la figure ci - dessous(Ce n'est qu'un exemple très simple pour la démonstration).

En plus d'ajouter une couche miroir supplémentaire,Le miroir reste toujours une combinaison de tous les miroirs actuels,Il est très important de comprendre cela.Un exemple simple est donné dans la figure ci - dessous,Chaque couche miroir contient 3 Fichiers,Et le miroir contient 6 Fichiers.

La couche miroir de l'image ci - dessus est légèrement différente de celle de l'image précédente,L'objectif principal est de faciliter la présentation des documents.

L'image ci - dessous montre un miroir à trois niveaux un peu compliqué,À l'extérieur, tout le miroir n'a que 6 Fichiers,C'est parce que les fichiers en haut 7 C'est un document 5 Une version plus récente de.

Dans ce cas,Les fichiers de la couche miroir supérieure écrasent les fichiers de la couche miroir inférieure.Cela permet d'ajouter une version plus récente du fichier au miroir en tant que nouvelle couche miroir.

Docker Par le moteur de stockage(La nouvelle version utilise le mécanisme Snapshot)Pour mettre en œuvre la pile de couches miroirs,Et s'assurer que plusieurs couches miroirs sont affichées comme un système de fichiers unifié.

Linux Les moteurs de stockage disponibles sur AUFS、Overlay2、Device Mapper、Btrfs Et ZFS.Comme son nom l'indique,Chaque moteur de stockage est basé sur Linux La technologie du système de fichiers ou du périphérique bloc correspondante dans,Et chaque moteur de stockage a ses propres caractéristiques de performance.

Docker In Windows Seul windowsfilter Un moteur de stockage,Le moteur est basé sur NTFS Mise en œuvre de la stratification et CoW[1].

L'image ci - dessous montre le même miroir à trois niveaux que l'affichage du système.Toutes les couches miroirs sont empilées et fusionnées,Fournir une vue unifiée à l'extérieur.

Partager la couche miroir
Les couches miroirs peuvent et seront partagées entre plusieurs miroirs . Cela permet d'économiser de l'espace et d'améliorer les performances .

Regardez en arrière ce qui a été utilisé pour tirer nigelpoulton/tu-demo Toutes les étiquettes sous l'entrepôt docker image pull Les ordres(Contient -a Paramètres).

$ docker image pull -a nigelpoulton/tu-demo

Faites attention à ceux qui Already exists Fin de la ligne.

Dans ce cas,,Docker .Essayez d'abord de tirer l'étiquette comme latest Miroir de.Et puis, Quand l'étiquette de retrait est v1 Et v2 Dans le miroir de,Docker Remarquez les couches miroirs qui composent ces deux miroirs , Une partie existe déjà . La raison en est que 3 Les miroirs sont très similaires , Donc beaucoup de couches miroirs sont partagées .

Comme indiqué précédemment,Docker In Linux Beaucoup de moteurs de stockage sont pris en charge sur (Snapshotter). Chaque moteur de stockage a son propre niveau de miroir 、 Partage de la couche miroir et copie en écriture (CoW)Réalisation concrète de la technologie.

Mais, Son effet final est parfaitement compatible avec l'expérience utilisateur .Bien que Windows Un seul moteur de stockage est pris en charge , Peut encore être fourni avec Linux Même expérience fonctionnelle .

Extraire le miroir à partir du résumé
L'utilisation d'étiquettes pour extraire des miroirs a été décrite plus tôt ,C'est aussi une façon courante de.Mais le problème est, Les étiquettes sont variables ! Cela signifie que le miroir peut parfois être mal étiqueté , Il arrive même qu'un nouveau miroir soit étiqueté comme existant . Tout cela peut causer des problèmes !

Supposons que le miroir golftrack:1.5 Il y a un Bug. Donc vous pouvez tirer le miroir et le réparer , Et repoussez le miroir mis à jour vers l'entrepôt avec la même étiquette .

Pensez à ce qui vient de se passer .Miroir golftrack:1.5 Existe Bug, Ce miroir a été appliqué à l'environnement de production . Si vous créez une nouvelle version du miroir , Et j'ai réparé ça Bug.

Alors la question se pose, Le nouveau miroir est construit et renvoyé à l'entrepôt avec la même étiquette que le miroir de problème ! Le miroir original est écrasé , Mais il reste beaucoup de conteneurs en service dans l'environnement de production , Il n'y a aucun moyen de distinguer la version miroir utilisée avant ou après réparation , Parce que les deux miroirs ont la même étiquette !

Docker 1.10 Un nouveau modèle de stockage de contenu adressable a été introduit dans . Dans le cadre du modèle , Chaque miroir a maintenant une valeur de hachage de mot de passe basée sur son contenu .Pour faciliter la discussion, Utilisez le résumé pour faire référence à cette valeur de hachage . Parce que le résumé est une valeur de hachage pour le contenu miroir , Donc le changement de contenu de l'image miroir doit entraîner un changement de valeur de hachage . Cela signifie que le résumé est immuable . De cette façon, les problèmes discutés précédemment peuvent être résolus .

Chaque fois qu'un miroir est tiré , Les résumés seront utilisés comme docker image pull La commande renvoie une partie du Code .Il suffit de docker image ls Ajouter après la commande --digests Les paramètres permettent de visualiser localement le résumé du miroir .

Ensuite, faites une démonstration pertinente par exemple .

$ docker image pull alpine

$ docker image ls --digests alpine

D'après le fragment de code ci - dessus ,Alpine La valeur de signature du miroir est la suivante .

sha256:69e70a79f2d41ab5d637de98c1e0b055206ba40a8145e7bddb55ccc04e13cf8f

Le résumé de l'image miroir est maintenant connu , Ensuite, vous pouvez utiliser la valeur sommaire pour tirer à nouveau ce miroir . Cette méthode permet de tirer avec précision l'image désirée .

Il n'y a pas de natif Docker La commande prend en charge le miroir du Service d'entrepôt à distance (Par exemple:Docker Hub) Obtenir une signature miroir . Cela signifie que vous ne pouvez d'abord extraire le miroir local que par étiquette , Ensuite, tenez vous - même une liste sommaire des miroirs . Le résumé miroir ne changera jamais à l'avenir .

L'exemple suivant commence par Docker Supprimer sur l'hôte alpine:latest Miroir, Puis montre comment passer le résumé (Au lieu de l'étiquette) Pour tirer à nouveau le miroir .

$ docker image rm alpine:latest

$ docker image pull [email protected]:c0537...7c0a7726c88e2bb7584dc96

Valeur de hachage miroir (Résumé)
De Docker 1.10 Début de la version, Un miroir est un ensemble de couches indépendantes faiblement couplées .

Le miroir lui - même est un objet de configuration , Il contient une liste des couches miroirs et quelques métadonnées .

La couche miroir est l'endroit où les données réelles sont stockées ( Comme les fichiers, etc , Les couches miroirs sont complètement indépendantes les unes des autres , Il n'y a pas de concept subordonné à une collection de miroirs ).

L'identité unique du miroir est un chiffrement ID, C'est - à - dire la valeur de hachage de l'objet de configuration lui - même . Chaque couche miroir est également chiffrée par un ID Distinction, Sa valeur est la valeur de hachage du contenu de la couche miroir elle - même .

Modifier le contenu d'un miroir ou l'une de ses couches de miroir , Provoque des changements dans la valeur de hachage chiffrée .Alors..., Le miroir et sa couche miroir sont immuables , Tout changement peut être facilement identifié .

C'est ce qu'on appelle le hachage de contenu (Content Hash).

En poussant et en tirant le miroir , La couche miroir est compressée pour économiser la largeur de bande du réseau et l'espace de stockage binaire de l'entrepôt .

Mais la compression change le contenu du miroir , La valeur de hachage du contenu d'un miroir après une opération Push ou pull , Ne correspond pas au contenu du miroir ! C'est un problème évident .

Par exemple, En poussant la couche miroir vers Docker Hub Quand,Docker Hub On tentera de vérifier que le miroir reçu n'a pas été altéré pendant la transmission. . Pour compléter la vérification ,Docker Hub La valeur de hachage est recalculée à partir de la couche miroir , Et comparé à la valeur de hachage originale . Parce que le miroir est comprimé pendant la transmission (Il y a eu un changement), Donc la vérification de la valeur de hachage échouera aussi .

Pour éviter ce problème , Chaque couche miroir contient également une valeur de hachage de distribution (Distribution Hash). C'est la valeur de hachage d'un miroir compressé , Lorsque vous tirez ou poussez un miroir du Service d'entrepôt miroir , Qui contient la valeur de hachage de distribution , Cette valeur de hachage est utilisée pour vérifier si le miroir extrait a été altéré .

Ce modèle de stockage adressable au contenu améliore considérablement la sécurité du miroir , Parce que les opérations pull et Push fournissent un moyen de s'assurer que les données du miroir et de la couche miroir sont cohérentes .

Le modèle résout également la génération aléatoire de miroirs et de couches miroirs ID Cette façon de faire pourrait conduire à ID Problèmes de conflit.

Miroir d'une architecture à plusieurs niveaux
Docker Le plus louable est la facilité d'utilisation . Exécuter une application est aussi simple que tirer un miroir et exécuter un conteneur . Ne vous inquiétez pas pour l'installation 、 Problèmes de dépendance ou de configuration .Déballage et prêt à l'emploi.

Avec Docker Développement, Les choses commencent à se compliquer —— Surtout après l'ajout de nouvelles plateformes et architectures ,Par exemple Windows、ARM Et s390x.Je l'ai découvert., Avant de tirer le miroir et de l'exécuter , Il faut déterminer si le miroir correspond au schéma de l'environnement d'exécution actuel ,C'est cassé. Docker Une expérience fluide.

Miroir Multi - architecture(Multi-architecture Image)L'émergence de!

Docker( Services de stockage de miroirs et de miroirs ) La spécification prend actuellement en charge les miroirs Multi - schémas . Cela signifie qu'une étiquette d'entrepôt miroir (repository:tag) Le miroir ci - dessous peut supporter simultanément 64 Bits Linux、PowerPC Linux、64 Bits Windows Et ARM Et d'autres Architectures.

En termes simples, Est que plusieurs plateformes et architectures peuvent être prises en charge sous une seule étiquette miroir . Voici une démonstration pratique de cette fonctionnalité .

Pour mettre en œuvre cette fonctionnalité,Service d'entrepôt miroir API Soutenir deux structures importantes :Manifest Liste(Nouveau)Et Manifest.

Manifest Une liste est une liste de schémas supportés par une étiquette miroir . Chaque architecture qu'il supporte ,Ils ont tous leurs propres Mainfest Définition, Il énumère la composition de ce miroir .

La figure ci - dessous utilise Golang Le miroir officiel, par exemple . Sur le côté gauche de l'image se trouve Manifest Liste, Il contient chaque schéma supporté par ce miroir .

Manifest Chaque élément de la liste a une flèche , Pointez vers le spécifique Manifest, Il contient la configuration du miroir et les données de la couche miroir .

Avant l'opération spécifique ,Commençons par le principe..

Supposons que Raspberry Pi(Basé sur ARM Architecture Linux)Cours. Docker.

En tirant le miroir ,Docker Le client appelle Docker Hub Service d'entrepôt miroir correspondant API Terminer le retrait .

Si le miroir a Mainfest Liste,Et existe Linux on ARM Celui - ci,Et Docker Client On le trouvera. ARM Le schéma correspond à Mainfest Et résoudre le chiffrement de la couche miroir qui compose le miroir ID.

Et de Docker Hub Extraire chaque couche miroir du stockage binaire .

L'exemple suivant montre comment un miroir Multi - architecture tire un officiel Golang Miroir(Prise en charge de plusieurs Architectures) Travailler à l'heure , Et à travers une simple commande Go Version de et sur l'hôte CPU Architecture.

Il est important de noter que, Les deux exemples utilisent la même commande docker container run. Pas besoin d'être informé Docker La version miroir spécifique est 64 Bits Linux Toujours 64 Bits Windows.

Seules les commandes normales sont exécutées dans l'exemple , Le choix de la version miroir correcte requise pour la plateforme et le schéma actuels est fait par Docker Terminé.

64 Bits Linux Voici quelques exemples.

$ docker container run --rm golang go version

64 Bits Windows Voici quelques exemples.

PS> docker container run --rm golang go version

L'opération précédente consiste à Docker Hub Tirez! Golang Miroir, Démarrage par conteneur ,Mise en œuvre go version Les ordres,Et produit Go Version et hôte de OS / CPU Informations sur le schéma.

La dernière ligne de chaque exemple montre go version La sortie de la commande . Vous pouvez voir que les deux exemples utilisent exactement la même commande ,Mais Linux L'exemple tiré est linux/amd64 Miroir,Et Windows L'exemple tiré est windows/amd64 Miroir.

Tous les miroirs officiels sont pris en charge Manifest Liste.Mais, Les travaux visant à soutenir pleinement les diverses architectures se poursuivent .

La création de miroirs Multi - schémas nécessite plus de travail de la part des éditeurs de miroirs .En même temps, Certains logiciels ne sont pas non plus multiplateforme .Sur cette base,,Manifest La liste est facultative——Non. Manifest Dans le cas de la liste, Le Service d'entrepôt miroir retournera à la normale Manifest.

Supprimer le miroir
Quand un miroir n'est plus nécessaire ,Peut passer docker image rm Commande depuis Docker L'hôte supprime le miroir .Parmi eux,rm - Oui. remove Abréviation de.

La suppression supprime le miroir et les couches de miroir associées sur l'hôte courant .Impossible de passer docker image ls La commande voit le miroir supprimé , Et le répertoire correspondant contenant les données de la couche miroir sera supprimé .

Si une couche miroir est partagée par plusieurs miroirs , Ce n'est que lorsque tous les miroirs qui dépendent de cette couche de miroir sont supprimés , Cette couche miroir sera supprimée .

Dans l'exemple suivant, par miroir ID Pour supprimer un miroir, Peut - être un miroir sur la machine du lecteur ID C'est différent.

$ docker image rm 02674b9cb179

S'il y a un conteneur en état d'exécution sur le miroir supprimé , La suppression n'est donc pas autorisée . Avant d'exécuter à nouveau la commande supprimer le miroir , Tous les conteneurs associés à ce miroir doivent être arrêtés et supprimés .

Une façon de supprimer un Docker Le raccourci vers tous les miroirs sur l'hôte est docker image rm Tous les miroirs passés dans le système actuel dans la commande ID,Peut passer docker image ls Obtenir tous les miroirs ID(Utiliser -q Paramètres).

Commandes courantes

docker image pull C'est la commande pour télécharger le miroir . Le miroir est téléchargé à partir de l'entrepôt du Service d'entrepôt miroir distant .Par défaut, Le miroir va partir de Docker Hub Dans l'entrepôt de .docker image pull alpine:latestLes commandes seront exécutées à partir de Docker Hub De alpine Retirer l'étiquette de l'entrepôt comme latest Miroir de.

docker image ls Liste locale Docker Miroir stocké sur l'hôte .Peut passer --digests Paramètres pour voir le miroir SHA256 Signature.

docker image inspect Les commandes sont très utiles ! La commande montre parfaitement les détails du miroir , Y compris les données et métadonnées de la couche miroir .

docker image rm Pour supprimer un miroir .docker image rm alpine:latest L'ordre signifie supprimer alpine:latest Miroir. Lorsque le miroir a un conteneur associé , Et le conteneur est en marche (Up)Ou arrêter(Exited)Dans l'état, La suppression de ce miroir n'est pas autorisée .

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

Tags miroir docker
Scroll to Top