2016-03-29 2 views
1

Es ist allgemein bekannt, dass wenn die RUN-Anweisung nach großen Dateioperationen aufräumt, die resultierende Schichtgröße kleiner wäre. Wenn ich jedoch das folgende Skript ausführe, ist die resultierende Ebene groß und entspricht in etwa der Größe der Dateien, die ursprünglich kopiert und bereinigt wurden.Dockerfile RUN erstellt eine Fettschicht auch bei Säuberung

Wie könnte diese Größe einer Ebene festgelegt werden, wenn die kopierten Dateien in derselben Ebene gereinigt werden?

RUN mkdir -p /etc/puppet && \ 
    cd /etc/puppet && \ 
    apt-get update && apt-get install -y wget puppet && \ 
    wget -rnH --level=10 -e robots=off --reject "index.html*" http://somefileserver.org/puppet/allpuppetstuff && \ 
    puppet module install puppetlabs/stdlib && \ 
    puppet module install 7terminals-java && \ 
    puppet apply -e "include someserver" && \ 
    apt-get purge -y --auto-remove puppet wget && \ 
    rm -rfv /etc/puppet/* && \ 
    rm -rfv /var/lib/apt/lists/* 
+0

Versuchen Sie ein Experiment: Starten Sie eine Shell in einem Container mit dem Bild von vor dem 'RUN'-Befehl. Dann, mit 'df', um die Verwendung zu überprüfen, schauen Sie sich zunächst den Speicherplatz an, nachdem Sie 'apt-get update' ausgeführt haben, nach der Installation, nach 'apt-get-purge' und nach dem Löschen aller anderen Dateien. –

+0

vielleicht sollten Sie versuchen, 'apt-get install -y - no-install-empfiehlt wget Puppe' – user2915097

Antwort

1

Einige Details gefunden nach einigen Änderungen.

Es scheint Docker Duplikate auf alten Layer, wenn eine neuere Schicht Dateien auf der früheren Schicht verändert. Dies ist die Ursache der Fettschicht, die durch den obigen RUN-Befehl erzeugt wurde, auch wenn die Gesamtdateigröße diff am Ende der Operation minimal ist. Ich konnte keine definitiven Ressourcen finden, um dies zu zitieren, aber das ist die bisherige Erfahrung.

Grundsätzlich sollten Dateioperationen im Zusammenhang mit dem Bild immer in einer Ebene erfolgen.

Verwandte Themen