Ich möchte meine Dockerfile optimieren. Und ich möchte Cachedatei in der Diskette behalten.
Aber, ich habe festgestellt, wenn ich docker build .
es immer versuchen, jede Datei aus dem Netzwerk zu bekommen.
Ich möchte mein zwischengespeichertes Verzeichnis während der Erstellung teilen (zB. / var / cache / yum / x86_64 / 6).
Aber, es funktioniert nur auf docker run -v ...
.
Irgendwelche Vorschläge? (In diesem Beispiel ist nur 1 rpm installiert, im wirklichen Fall muss ich hunderte rpms installieren)
Mein Entwurf Dockerfile
%Vor%Zum zweiten Mal möchte ich ein ähnliches Bild erstellen
%Vor%Ich möchte nicht den openssh-Server von internat holen (es ist langsam). In meinem realen Fall ist es nicht ein Paket, es sind etwa 100 Pakete.
Ein Update auf vorherige Antworten, aktueller Docker Build
akzeptiert --build-arg
, die Umgebungsvariablen wie http_proxy
übergeben
ohne es im resultierenden Bild zu speichern.
Beispiel:
%Vor%Sie sollten einen Caching-Proxy verwenden (zB Http Replicator , squid-deb-proxy ...) oder apt -cacher-ng für Ubuntu, um Installationspakete zwischenzuspeichern. Ich denke, Sie können diese Software auf dem Host-Rechner installieren.
Option 1 - Zwischenspeichern von HTTP-Proxy - einfachere Methode mit modifizierter Docker-Datei:
%Vor%fügen Sie zu Ihrer Dockerfile hinzu (vor der ersten RUN-Zeile):
%Vor%Sie sollten den Cache von Zeit zu Zeit löschen.
Option 2 - transparenter Proxy zwischenspeichern, keine Änderung an Dockerfile:
%Vor%Sie müssen den Replikator als einen Benutzer (nicht root!) starten.
Richten Sie die transparente Weiterleitung ein:
%Vor%Deaktiviere Weiterleitung:
%Vor%Diese Methode ist die transparenteste und allgemeinste und Ihre Dockerfile muss nicht geändert werden. Sie sollten den Cache von Zeit zu Zeit löschen.
Verwenden Sie einfach ein Zwischen- / Basisbild:
Base Dockerfile, bauen Sie es mit docker build -t custom-base
oder etwas:
Anwendung Dockerfile:
%Vor%