Wie kann ich dockerfile schnell mit dem Cache wiederherstellen?

8

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.

    
Daniel YC Lin 26.02.2014, 03:09
quelle

3 Antworten

8

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%     
Piotr Czapla 25.03.2016, 21:22
quelle
9

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.

BEARBEITEN:

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.

    
Jiri 28.02.2014 08:31
quelle
7

Verwenden Sie einfach ein Zwischen- / Basisbild:

Base Dockerfile, bauen Sie es mit docker build -t custom-base oder etwas:

%Vor%

Anwendung Dockerfile:

%Vor%     
Johannes 'fish' Ziemke 28.02.2014 14:26
quelle

Tags und Links