Wir können das Bild unter zwei Gesichtspunkten optimieren: Reduzieren Sie die Anzahl der Bildebenen, um die Kapazität zu verringern 1. Reduzieren Sie die Anzahl der Bildebenen 1. Zusammenführen von AnweisungenJede Anweisung in der Docker-Datei erstellt eine Ebene. Wenn man sich jedoch die Best Practices in der offiziellen Dokumentation ansieht, findet man dort diesen Satz: In älteren Docker-Versionen war es wichtig, die Anzahl der Ebenen in Ihren Images zu minimieren, um deren Leistung sicherzustellen. Die folgenden Funktionen wurden hinzugefügt, um diese Einschränkung zu reduzieren:
... Referenzadresse: Minimieren Sie die Anzahl der Schichten Dies bedeutet, dass nur die Anweisungen RUN, COPY und ADD Ebenen erstellen, während andere Anweisungen ein Zwischenbild erstellen und die Bildgröße nicht beeinflussen. Die Befehlszusammenführung, von der wir sprechen, basiert hauptsächlich auf diesen drei Anweisungen. Nehmen wir als Beispiel das folgende Dockerfile VON debian:stable ARBEITSVERZEICHNIS /var/www LABEL version="v1" Führen Sie apt-get update aus. Führen Sie apt-get -y --no-install-recommends aus, um curl zu installieren. Führen Sie apt-get purge -y curl aus. Führen Sie apt-get autoremove -y aus. Führen Sie apt-get clean aus. RUN rm -rf /var/lib/apt/lists/* Erstellen des Images Docker-Build -t curl:v1. Anzeigen des Buildverlaufs durch den Verlauf # Docker-Verlauf curl:v1 BILD ERSTELLT ERSTELLT VON GRÖSSE KOMMENTAR 29b721c09b67 vor 18 Sekunden /bin/sh -c rm -rf /var/lib/apt/lists/* 0B aa28ae151e59 vor 20 Sekunden /bin/sh -c apt-get clean 0B 4f733781f557 vor 22 Sekunden /bin/sh -c apt-get autoremove -y 989kB f66887372121 vor 29 Sekunden /bin/sh -c apt-get purge -y curl 987kB d458ee0de463 vor 34 Sekunden /bin/sh -c apt-get -y --no-install-recommend… 4,46 MB 43fdcf68018c vor 44 Sekunden /bin/sh -c apt-get update 17,6 MB 65631e8bb010 vor 53 Sekunden /bin/sh -c #(nop) LABEL version="v1" 0B 7ef7c53b019c vor 53 Sekunden /bin/sh -c #(nop) WORKDIR /var/www 0B 8bfa93572e55 vor 13 Tagen /bin/sh -c #(nop) CMD ["bash"] 0B <fehlt> vor 13 Tagen /bin/sh -c #(nop) ADD file:d78d93eff67b18592… 124MB Bildgröße [root@localhost dockerfiles]# Docker-Bilder REPOSITORY TAG BILD ID ERSTELLT GRÖSSE curl v1 29b721c09b67 vor 10 Minuten 148 MB Wir verschmelzen die RUN-Anweisungen mit der Shell-ähnlichen Operation && Führen Sie apt-get update && \ aus. apt-get -y --no-install-recommends installiere curl && \ apt-get purge -y curl && \ apt-get autoremove -y && \ apt-get sauber && \ rm -rf /var/lib/apt/lists/* Buildverlauf und Bildgröße anzeigen # Docker-Verlauf curl:v2 BILD ERSTELLT ERSTELLT VON GRÖSSE KOMMENTAR 928e12c2f57e Vor etwa einer Minute /bin/sh -c apt-get update && apt-get -y … 989kB 5a32372025fb Vor etwa einer Minute /bin/sh -c #(nop) LABEL version="v2" 0B 7ef7c53b019c vor 30 Minuten /bin/sh -c #(nop) WORKDIR /var/www 0B 8bfa93572e55 vor 13 Tagen /bin/sh -c #(nop) CMD ["bash"] 0B <fehlt> vor 13 Tagen /bin/sh -c #(nop) ADD file:d78d93eff67b18592… 124MB # Docker-Bilder REPOSITORY TAG BILD ID ERSTELLT GRÖSSE curl v2 928e12c2f57e vor 3 Minuten 125 MB Es ist ersichtlich, dass allein durch die Installation einer einfachen Curl-Anwendung mittels Befehlszusammenführung etwa 20 MB Kapazität freigegeben wurden. Macht Ihr Dockerfile außerdem lesbarer und prägnanter. 2. Mehrstufiger AufbauMehrstufige Builds wurden in Docker 17.05 eingeführt. Mehrstufige Builds können die Build-Komplexität erheblich reduzieren und die Reduzierung der Image-Größe erleichtern. Schauen wir uns das Dockerfile für einen mehrstufigen Build an #Phase 1 VON golang:1.16 ARBEITSVERZEICHNIS /go/src KOPIEREN Sie app.go ./ Führen Sie den Befehl go build app.go -o myapp aus. #Phase 2 VON Grund auf ARBEITSVERZEICHNIS /server KOPIEREN --from=0 /go/src/myapp ./ CMD ["./meineApp"] Erstellen des Images # docker build --no-cache -t server_app:v2 . Anzeigen des erstellten Bilds
Die oben genannten Anwendungsfälle stammen aus dem vorherigen Artikel „Dockerfile Multi-Stage Build Practice“. Weitere Einzelheiten zum mehrstufigen Erstellen von Images finden Sie im Artikel. Ich werde hier nicht näher darauf eingehen. 3. Aktivieren Sie die Squash-FunktionDurch Aktivieren der Squash-Funktion (experimentelle Funktion) docker build --squash -t curl:v3 kann das erstellte Image in eine Ebene komprimiert werden. Um das überlegene Design der gemeinsamen Nutzung von Container-Image-Ebenen jedoch voll ausnutzen zu können, wird diese Methode nicht empfohlen. 2. Kapazität reduzieren 1. Wählen Sie ein kleines BasisbildDie Größe der einzelnen Linux-Distributionsimages variiert stark und selbst innerhalb desselben Distributionsimages gibt es Unterschiede. Nehmen wir Debian als Beispiel: Der Unterschied zwischen der stabilen Version und der Slim-Version beträgt ca. 40 MB # Docker-Bilder debian stable-slim 2aa48a485e3a vor 13 Tagen 80,4 MB debian stabil 8bfa93572e55 vor 13 Tagen 124 MB Wir haben das Basis-Image im Dockerfile auf die Slim-Version debian:stable-slim geändert VON debian:stable-slim Die erstellte Bildgröße ist kleiner # Docker-Bilder REPOSITORY TAG BILD ID ERSTELLT GRÖSSE curl v4 1aab5c9bf8b3 vor 17 Sekunden 81,4 MB Das aktuelle Image basiert auf Debian und enthält viele Binärdateien. Ein Docker-Container sollte einen einzelnen Prozess enthalten und nur das absolute Minimum beinhalten, das zu dessen Ausführung erforderlich ist. Wir brauchen eigentlich kein ganzes Betriebssystem. Wir können das Debian-Basisimage durch ein auf Alpine basierendes Image ersetzen. Von alpin ARBEITSVERZEICHNIS /var/www LABEL version="v5" RUN echo -e 'https://mirrors.aliyun.com/alpine/v3.6/main/\nhttps://mirrors.aliyun.com/alpine/v3.6/community/' > /etc/apk/repositories && \ APK-Update && \ APK-Upgrade && \ apk add --no-cache curl Überprüfen Sie die Bildgröße # Docker-Bilder REPOSITORY TAG BILD ID ERSTELLT GRÖSSE curl v5 7f735bb213be vor 11 Sekunden 10,1 MB An diesem Punkt hat unser Image 10 MB erreicht. Das von Alpine verwendete Paketverwaltungstool ist apk und einige Paketnamen können unterschiedlich sein. Der größte Unterschied 2. KontextmanagementDer COPY-Befehl, den wir oft verwenden KOPIEREN ./server/dir COPY kopiert den gesamten Build-Kontext in das Image und generiert eine neue Cache-Ebene. Um zu verhindern, dass unnötige Dateien wie Protokolle, Cache-Dateien und der Git-Verlauf in den Build-Kontext geladen werden, fügen wir besser .dockerignore hinzu, um nicht wesentliche Dateien zu ignorieren. Dies ist auch ein wichtiger Schritt zur Optimierung des Images und kann die Sicherheit des von uns erstellten Images besser gewährleisten. 3. Downloads rechtzeitig aufräumenWir haben das folgende Dockerfile .. ARBEITSVERZEICHNIS /tmp RUN curl -LO https://docker.com/download.zip && tar -xf download.zip -C /var/www Führen Sie den Befehl rm -f download.zip aus. ... Obwohl wir rm verwendet haben, um das Paket download.zip zu löschen, wurde download.zip aufgrund des Bildschichtproblems in einer neuen Schicht gelöscht und die vorherige Schicht war noch vorhanden. Wir müssen die Downloads zeitnah in einer Schicht bereinigen Führen Sie den folgenden Befehl aus: curl -LO https://docker.com/download.zip && tar -xf download.zip -C /var/www && rm -f download.zip Darüber hinaus sollten Sie bei der Installation von Software das Paketverwaltungstool verwenden, um die Abhängigkeiten und den Cache der heruntergeladenen Software rechtzeitig zu löschen. Verwenden Sie beispielsweise das Paketverwaltungstool apt, um in unserer Docker-Datei aufzuräumen. Hier werden die zugehörigen Vorgänge zum Rationalisieren von Bildern vorgestellt. Weitere relevante rationalisierte Bilder von Docker-Containern finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: SQL-Implementierung von LeetCode (177. N-höchstes Gehalt)
Wir alle Webmaster wissen, dass es bei der Optimi...
Dieses Mal werden wir hauptsächlich etwas über da...
Dieser Artikel zeigt ein kleines Beispiel für das...
Suchen Sie die ID des laufenden Containers Docker...
Freunde, die HTML-, CSS- und JS-Frontend lernen, ...
Hintergrund Temporäre Tablespaces werden verwende...
Inhaltsverzeichnis Vorwort Welche Situationen kön...
Code kopieren Der Code lautet wie folgt: <a hr...
Erstellen Sie eine Animation der acht Planeten de...
Vorwort Wir alle wissen, dass MySQL-Abfragen den ...
brauchen Fügen Sie eine Paging-Leiste hinzu, die ...
Vorwort Sie erhalten möglicherweise häufig Warn-E...
Verwenden Sie JS zum Vergrößern und Verkleinern, ...
1. Installieren Sie Tomcat8 mit Docker 1. Suchen ...
MySQL Installer bietet eine benutzerfreundliche, ...