Das Erstellen eines Images ist ein sehr wichtiger Prozess im DevOps-Prozess. Im Allgemeinen bedeutet das Erstellen eines Images, eine Dockerfile-Datei zu schreiben und das Image dann über den Docker-Client zu erstellen. Der Docker-Client prüft zunächst, ob lokal ein Image vorhanden ist. Wenn nicht, ruft er es für Sie aus dem Image-Repository ab. Analysieren Sie dann die von Ihnen geschriebene Docker-Datei, um ein neues Image zu erstellen. Dieser Artikel wird Ihnen helfen zu verstehen
Der nächste Artikel erklärt: Wie erstelle ich ein Image, wenn ich Docker nicht verwende? Wir nehmen Microsofts aspnet2.2 als Grundlage, um als Beispiel ein Image des aspnetcore-Projekts zu erstellen mcr.microsoft.com/dotnet/core/aspnet:2.2 Holen Sie sich Mainfest-Informationen gemäß dem Basis-Image REGISTRY https://mcr.microsoft.com/v2/dotnet/core/aspnet/manifests/2.2 Akzeptieren: Anwendung/vnd.oci.image.manifest.v1+json, Anwendung/vnd.docker.distribution.manifest.v2+json, Anwendung/vnd.docker.distribution.manifest.v1+json Der erhaltene Inhalt ist wie folgt: { "schemaVersion": 2, "Medientyp": "Anwendung/vnd.docker.distribution.manifest.v2+json", "Konfiguration": { "Medientyp": "Anwendung/vnd.docker.container.image.v1+json", "Größe": 4039, "Digest": "sha256:e7e3b238011ce0f2b9350153535fe273caa01f0e7188d0b91f965b3802ddc600" }, "Ebenen": [ { "Medientyp": "application/vnd.docker.image.rootfs.diff.tar.gzip", "Größe": 22524609, "Digest": "sha256:804555ee037604c40de144f9f8da0d826d38db82f15d74cded32790fe279a8f6" }, { "Medientyp": "application/vnd.docker.image.rootfs.diff.tar.gzip", "Größe": 17692725, "Digest": "sha256:970251047358aea56ba6db6975b14ff12470b75de0c2477f4445240ddd727fd4" }, { "Medientyp": "application/vnd.docker.image.rootfs.diff.tar.gzip", "Größe": 2978257, "Digest": "sha256:f3d4c41a4fd13f35c0b46f19a4e27845f4695163cc7174d908ff84836bbc2f5a" }, { "Medientyp": "application/vnd.docker.image.rootfs.diff.tar.gzip", "Größe": 62145592, "Digest": "sha256:bd391c46585f9f8d84992bbaa9087189148c1601968eaaf097d5b3ed60840e5e" } ] } Die Mainfest-Datei enthält Digest-Datensätze
Erhalten Sie Konfigurationsdetails basierend auf der obigen Zusammenfassung der Konfigurationsinformationen Erhalten Sie: https://mcr.microsoft.com/v2/dotnet/core/aspnet/blobs/sha256:e7e3b238011ce0f2b9350153535fe273caa01f0e7188d0b91f965b3802ddc600 { "Architektur": "amd64", "Konfiguration": { "Hostname": "", "Domänenname": "", "Benutzer": "", "AttachStdin": falsch, "AttachStdout": falsch, "AttachStderr": false, "Tty": falsch, "OpenStdin": falsch, "StdinOnce": falsch, "Umgebung": [ „PFAD=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin“, "ASPNETCORE_URLS=http://+:80", „DOTNET_RUNNING_IN_CONTAINER=true“, „ASPNETCORE_VERSION=2.2.8“ ], "Befehl": [ "schlagen" ], "ArgsEscaped": wahr, "Bild": "sha256:5ecfe4016ac8e911a94aa601a675f7204e9ccab00cbb08e7067c184ad40f34e9", "Volumes": null, "Arbeitsverzeichnis": "", "Einstiegspunkt": null, "OnBuild": null, "Labels": null }, "Container": "14196c2f9c327d41e26682d32c7c89c4e7c78aa32f8b7501a23192035a9f4844", "Containerkonfiguration": { "Hostname": "", "Domänenname": "", "Benutzer": "", "AttachStdin": falsch, "AttachStdout": falsch, "AttachStderr": false, "Tty": falsch, "OpenStdin": falsch, "StdinOnce": falsch, "Umgebung": [ „PFAD=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin“, "ASPNETCORE_URLS=http://+:80", „DOTNET_RUNNING_IN_CONTAINER=true“, „ASPNETCORE_VERSION=2.2.8“ ], "Befehl": [ "/bin/sh", "-C", "curl -SL-Output Aspnetcore.tar.gz https://dotnetcli.azureEdge.net/dotnet/aspnetcore/runtime/$aspnetcore_version/aspnetcore-Runtime-$aspnetcore_version-linux-x64.tar.gzz && asspNetcore_Sha512 77DF2C243F931E10529DEF21DCBF9CE277609B30D462126BF8B8B3CAB36476BEC3D63A927B8E4E4E59E4D4CADE23EEF456FBA12FBA12FBA121212FBA1121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212. tar.gz \ "| SHA512SUM -c -&& mkdir -p/usr/Share/dotnet && tar -Zxf Aspnetcore.tar.gz -c/usr/shary/dotnet && rm Aspnetcore.tar.gz && ln -S/usr/sharn/sharn/dotnet/dotnet/dotnet/us/us. ], "Bild": "sha256:5ecfe4016ac8e911a94aa601a675f7204e9ccab00cbb08e7067c184ad40f34e9", "Volumes": null, "Arbeitsverzeichnis": "", "Einstiegspunkt": null, "OnBuild": null, "Labels": null }, "erstellt": "2019-12-28T08:12:05.676492579Z", "docker_version": "3.0.8", "Geschichte": [ { "erstellt": "2019-12-28T04:23:47.4966447Z", "created_by": "/bin/sh -c #(nop) ADD file:90a2c81769a336bed3f731f44a385f2a65b0916f517a0b77c06c224579bf9a9a in / " }, { "erstellt": "2019-12-28T04:23:47.719507596Z", "erstellt von": "/bin/sh -c #(nop) CMD [\"bash\"]", "empty_layer": wahr }, { "erstellt": "2019-12-28T08:11:05.607009582Z", "erstellt von": "/bin/sh -c apt-get update && apt-get install -y --no-install-recommends ca-certificates libc6 libgcc1 libgssapi-krb5-2 libicu57 liblttng-ust0 libssl1.0.2 libstdc++6 zlib1g && rm -rf /var/lib/apt/lists/*" }, { "erstellt": "2019-12-28T08:11:07.64336022Z", "erstellt von": "/bin/sh -c #(nop) ENV ASPNETCORE_URLS=http://+:80 DOTNET_RUNNING_IN_CONTAINER=true", "empty_layer": wahr }, { "erstellt": "2019-12-28T08:11:16.475068844Z", "erstellt von": "/bin/sh -c apt-get update && apt-get install -y --no-install-recommends curl && rm -rf /var/lib/apt/lists/*" }, { "erstellt": "2019-12-28T08:11:43.814078508Z", "erstellt von": "/bin/sh -c #(nop) ENV ASPNETCORE_VERSION=2.2.8", "empty_layer": wahr }, { "erstellt": "2019-12-28T08:12:05.676492579Z", "created_by": "/bin/sh -c curl -SL --output aspnetcore.tar.gz https://dotnetcli.azureedge.net/dotnet/aspnetcore/Runtime/$ASPNETCORE_VERSION/aspnetcore-runtime-$ASPNETCORE_VERSION-linux-x64.tar.gz && aspnetcore_sha512='954072376698be69acb7e277df2c243f931e10529def21dcbf9ce277609b30d462126bf8b8b3cab36476bec3d63a927b8e44e59e4d4cade23eef45956fba1ffd' && echo \"$aspnetcore_sha512 aspnetcore.tar.gz\" | sha512sum -c - && mkdir -p /usr/share/dotnet && tar -zxf aspnetcore.tar.gz -C /usr/share/dotnet && rm aspnetcore.tar.gz && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet" } ], "os": "linux", "rootfs": { "Typ": "Ebenen", "diff_ids": [ "sha256:814c70fdae62bc26c603bfae861f00fb1c77fc0b1ee8d565717846f4df24ae5d", „sha256:0cf75cb98eb2e0a82631d4aff71b40ba79ff7f83e0361f696875e592a1a4cefc“, "sha256:15e45d99c92686fb1fd61a41431d8400d7a0e8381595d09d666b0809c4f5d993", "sha256:579a8f1d6a123f98095c0b1a1395079f7504391fd2a8bc529dede305a2072a36" ] } } Laden Sie die entsprechenden Ebenen gemäß diff_ids herunter Vergleichen Sie nach dem Herunterladen die Zusammenfassung, um die Rechtmäßigkeit der Bilddatei sicherzustellen. Pfadregeln: https://mcr.microsoft.com/v2/dotnet/core/aspnet/blobs/sha256:XXXXXX Aufbau unseres ImagesFügen Sie unsere benutzerdefinierte Konfiguration basierend auf der Konfiguration des Basisabbilds hinzu
In allen Ebenen des Basisbildes erstellen wir auch eine Ebene zum Verpacken des Bildes Entpacken Sie das generierte Image-Tarball Es gibt eine zusätzliche tar.gz-Datei. Nach der Dekomprimierung enthält diese die von uns gepackten Dateien.
config.json-Vergleich mit Basis-Image Lassen Sie uns den Vorgang zum Erstellen eines Images überprüfen und das Mainfest entsprechend dem Image-Namen abrufen.
Nachdem wir das Prinzip kennen, können wir ein Tool schreiben, um den gesamten Prozess zu implementieren Mit meinem Open-Source-Docker-Image-Build können Sie schnell Container-Images erstellen, ohne Docker installieren zu müssen Unterstützt die folgenden Image-Repositorys als grundlegende Image-Erstellung
Damit ist dieser Artikel zur Analyse der Prinzipien der Docker-Image-Erstellung abgeschlossen (Sie können Images erstellen, ohne Docker zu installieren). Weitere Informationen zur Docker-Image-Erstellung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Detaillierte Erklärung zum Anpassen des Stils von CSS-Bildlaufleisten
>>: MySQL Online-Übung zur Deadlock-Analyse
Die Anzeige von Daten ist seit jeher eine Forderu...
Inhaltsverzeichnis 1. Weltweit registrierte Kompo...
Inhaltsverzeichnis 1. Mittelsmann-Modell 2. Beisp...
1. Am besten fügen Sie vor dem HTML-Tag einen Satz...
Umsetzungsprinzip Die Hauptgrafik besteht aus zwe...
1. Installieren und verwenden Sie Docer CE Dieser...
Was ist eine Datei? Eigentlich sind alle Dateien ...
Das Anzeigen und Interpretieren von Informationen...
Wirkung Die Bilder im Code können selbst geändert...
Unabhängig davon, ob Sie ein Windows- oder Linux-...
Manchmal möchten Sie eine App testen, aber nicht ...
Wenn Sie Alibaba Cloud Server verwenden, müssen S...
Der spezifische Code lautet wie folgt: <!DOCTY...
Inhaltsverzeichnis Vorwort Mehrere gängige Bitope...
Szenario: Die gecrawlten Daten erzeugen eine Date...