Der Grund für die heutige Beliebtheit von Docker liegt vor allem in seiner Leichtigkeit, schnellen Bereitstellung und Ressourcennutzung. Die Qualität eines Docker-Images hängt jedoch hauptsächlich von der Qualität des Docker-Files ab. Dasselbe Funktionsimage, aber die Image-Größen der verschiedenen Dockerfile-Builds sind unterschiedlich. Dies liegt daran, dass Docker schreibgeschützte Schichten schichtweise ansammelt und jede Schicht jede Anweisung im Dockerfile darstellt. Daher hängt die Größe des Docker-Image vollständig von der Größe der Zwischenschicht ab, die durch jede Anweisung im Dockerfile generiert wird. Lassen Sie uns die Erstellung eines Dockerimages anhand eines kleinen Beispiels im Detail erklären. Wir haben ein Dockerfile: VON Ubuntu:14.04 Füge run.sh hinzu / VOLUME /Daten CMD [“./run.sh”] Dieses einfache Dockerfile führt im Wesentlichen folgende Aufgaben aus: Basierend auf dem Ubuntu:14.04-System wird run.sh in das Stammverzeichnis eingefügt, der Volume-Einhängepunkt festgelegt und anschließend das Skript run.sh ausgeführt, wenn das Image gestartet wird. Die folgende Abbildung zeigt das resultierende Docker-Image: Aus der Abbildung können wir offensichtlich erkennen, dass die vier Anweisungen jeweils vier Schichten bilden. Angenommen, Ubuntu:14.04 ist 150 MB groß und run.sh ist 1 MB groß, dann beträgt die Größe der Schicht FROM Ubuntu:14.04 150 MB, die Größe der Schicht ADD run.sh / beträgt 1 MB und die Größe der Schicht VOLUME /data und CMD ["./run.sh"] ist 0, da keine Dateien oder andere Daten hinzugefügt werden und keine Daten im System generiert werden. Die Größe des gesamten Bildes beträgt also 151 MB. Nachdem wir das Prinzip der Docker-Image-Generierung kennen, sprechen wir über die Optimierung und Komprimierung von Docker-Images. Eine Sache, die erklärt werden muss, ist, dass die Anzahl der Ebenen in einigen Fällen nicht die Größe des Bildes bestimmt. Nur wenn die Docker-Datei angezeigt wird:
Das Image kann komprimiert und optimiert werden, wenn RUN yum uninstall *** verwendet wird. Da die beiden obigen Sätze ein Tool installieren und es dann deinstallieren. Unter normalen Umständen haben wir das Gefühl, dass die Größe der Installation und Deinstallation 0 ist, aber dies ist im Docker-Image nicht der Fall. RUN yum uninstall *** kann nur die vorherige Ebene unsichtbar machen, aber die Größe der vorherigen Ebene ändert sich nicht. Wenn wir also den Effekt von 0 erzielen möchten, müssen wir diese beiden Ebenen zu einer Ebene komprimieren, was wie folgt geschrieben wird:
Dadurch wird der Effekt einer Bildkomprimierung erzielt. Daher gibt es beim Komprimieren von Bildern zwei Hauptpunkte: 1. Wählen Sie ein kleineres Originalbild, d. h. das Bild nach FROM sollte so klein wie möglich sein. 2. Fügen Sie die Ebenen in der Docker-Datei entsprechend der tatsächlichen Situation zusammen. Die konkrete Situation ist wie oben beschrieben. Es ist zu beachten, dass der Effekt nicht durch zufälliges Zusammenführen von Ebenen erreicht wird. Zusatzwissen: So bauen Sie Anaconda+Jupyter in ein Docker-Image ein Aufgrund geschäftlicher Anforderungen müssen wir in letzter Zeit ein Jupyter-Image erstellen, um Dienste bereitzustellen. Da Docker leichtgewichtig ist, kann es problemlos migriert werden. Hier ist eine kurze Einführung in das, was ich getan habe und die Fallstricke, auf die ich gestoßen bin: Installieren wir zuerst Anaconda. Es gibt Python2- und Python3-Versionen. Die Versionen sind unterschiedlich, aber der Erstellungsprozess ist derselbe. Es gibt zwei Möglichkeiten. Die erste besteht darin, dass Sie das Image über Dockerfile erstellen können, aber es gibt keine Interaktion beim Ausführen des Skripts Anaconda2-5.0.1-Linux-x86_64.sh, daher habe ich die Docker-Commit-Methode verwendet, um es auszuführen. Es stellt sich jedoch heraus, dass Sie es auch über Dockerfile erstellen können. Sie müssen nur zuerst das Skript Anaconda2-5.0.1-Linux-x86_64.sh auf Ihrem lokalen Computer ausführen und den generierten Ordner, der Anaconda2 ist, an der entsprechenden Stelle im Image hinzufügen und die Umgebungsvariablen ändern, um PATH hinzuzufügen. Nehmen wir Python2 als Beispiel: 1. Laden Sie das Skript Anaconda2-5.0.1-Linux-x86_64.sh von der offiziellen Anaconda-Website herunter und führen Sie es aus. Achten Sie beim Herunterladen darauf, ob Ihr System 32-Bit oder 64-Bit ist. 2. scp das Skript auf das Basisimage und installieren Sie den Dekomprimierungsbefehl bzip2
3. Führen Sie das Skript aus (geben Sie durchgehend „yes“ ein)
4. Aktualisieren Sie Anaconda
5. Installieren Sie Jupyter
6. Erstellen Sie ein Login-Passwort root@localhost ~]# ipython Python 3.5.2 (Standard, 4. August 2017, 02:13:48) Geben Sie „Copyright“, „Credits“ oder „Lizenz“ ein, um weitere Informationen zu erhalten IPython 6.1.0 – Ein verbessertes interaktives Python. Geben Sie „?“ ein, um Hilfe zu erhalten. In [1]: from notebook.auth import passwd In [2]: passwd() Passwort eingeben: Kennwort bestätigen: Aus[2]: 'sha1:5311cd8b9da9:70dd3321fccb5b5d77e66080a5d3d943ab9752b4' 7. Konfigurationsdateien generieren
Hinweis: Bei diesem Schritt können Kodierungsfehler auftreten: UnicodeEncodeError:'ascii'-Codec kann Zeichen an Position ... nicht kodieren. Die Lösung lautet: Ändern Sie im Ordner anaconda2 unter lib>python2.7>site.py Folgendes: wenn 0: # Aktivieren, um gebietsschemaabhängige Standard-Zeichenfolgenkodierungen zu unterstützen. Gebietsschema importieren loc = locale.getdefaultlocale() wenn loc[1]: Kodierung = loc[1] #Ändern Sie die 0 nach „if“ im obigen Codesegment in 1, speichern Sie und starten Sie Anaconda neu. 8. Ändern Sie die Konfigurationsdatei:
Fügen Sie den folgenden Inhalt hinzu: c.NotebookApp.ip='*' c.NotebookApp.password = u'sha1:5311cd8b9da9:70dd3321fccb5b5d77e66080a5d3d943ab9752b4' #Beachten Sie, dass der Schlüssel hier der gerade generierte ist c.NotebookApp.open_browser = False c.NotebookApp.port = 8888 #Geben Sie einen beliebigen Port an. Sie können auch den Standardport 8888 verwenden. 9. Speichern Sie das Bild
10. Starten Sie Bilder, um Dienste bereitzustellen:
Hinweis: In CentOS7 gibt es eine große Falle. Wenn Sie die Firewall ausschalten, kann systemctl nicht verwendet werden und es wird eine Fehlermeldung angezeigt: D-Bus-Verbindung konnte nicht hergestellt werden: Vorgang nicht zulässig Sie müssen also init zum Starten verwenden und können im Dockerfile CMD verwenden, um die Laufzeit zu starten. 11. Geben Sie das Docker-Image ein
12. Schalten Sie die Firewall aus
13. Starten Sie Jupyter
14. Geben Sie die Server-IP + die zugeordnete Portnummer in den Browser ein, um darauf zuzugreifen. Fertig~ Die oben beschriebene Docker-Bildkomprimierungs- und -optimierungsoperation ist der gesamte Inhalt, den der Editor mit Ihnen teilt. Ich hoffe, er kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen. Das könnte Sie auch interessieren:
|
<<: Realisierung baumförmiger Sekundärtabellen auf Basis von Angular
>>: Wichtige Punkte zum Schreiben von Inhalten für META-Tags in HTML-Webseiten
Unabhängig davon, ob Sie ein Windows- oder Linux-...
Speicherort der MySQL-Datenbank: 1. Wenn MySQL di...
Mit dem BGCOLOR-Attribut kann die Hintergrundfarb...
Dieser Artikel beschreibt die MySQL-Datentypen un...
Inhaltsverzeichnis Undo-Protokoll Erstellung und ...
Inhaltsverzeichnis Vue CLI erstellt ein Vue-Proje...
Portainer ist ein hervorragendes grafisches Verwa...
In diesem Artikel wird der spezifische JS-Code zu...
Windows cmd Telnet Format: Telnet-IP-Port Fall: T...
Hintergrund In der Gruppe werden einige Studieren...
Wenn Sie zusätzlichen Text in HTML als Auslassung...
Es handelt sich im Wesentlichen um ein allgemeine...
Inhaltsverzeichnis Überblick Build-Prozess Verwan...
Inhaltsverzeichnis Problembeschreibung Prinzipana...
Einführung Der Meta-Tag ist ein Hilfstag im HEAD-...