Ich habe eine ~ 300Mb gezippte lokale Datei, die ich einem Docker-Image hinzufüge. Der nächste Zustand extrahiert dann das Bild.Docker, wie man eine Datei HINZUFÜGT, ohne sie an ein Bild zu übergeben?
Das Problem besteht darin, dass die ADD-Anweisung zu einem Commit führt, das zu einer neuen Dateisystemschicht führt, die das Image ~ 300 MB größer als erforderlich macht.
ADD /files/apache-stratos.zip /opt/apache-stratos.zip
RUN unzip -q apache-stratos.zip && \
rm apache-stratos.zip && \
mv apache-stratos-* apache-stratos
Frage: Gibt es eine Behelfslösung lokale Dateien hinzufügen, ohne ein Commit verursacht?
Eine Option ist eine einfache Web-Server (zB python -m SimpleHTTPServer
) auszuführen, bevor die Docker bauen, starten und dann wget
die Datei abzurufen verwenden, aber das scheint ein bisschen chaotisch:
RUN wget http://localhost:8000/apache-stratos.zip && \
unzip -q apache-stratos.zip && \
rm apache-stratos.zip && \
mv apache-stratos-* apache-stratos
Eine weitere Möglichkeit ist Extrahiere die gezippte Datei beim Start des Containers anstatt der Build-Zeit, aber ich würde es vorziehen, den Start so schnell wie möglich zu halten.
Es scheint nicht 'ZIP-Datei auf Docker 1.2.0 dekomprimieren. –
"Wenn [src] ein lokales tar-Archiv in einem erkannten Komprimierungsformat (identity, gzip, bzip2 oder xz) ist, wird es als Verzeichnis entpackt." –
Die Tatsache, dass ADD keine Unterstützung für '.zip'-Dateien bietet, scheint eine beabsichtigte Entscheidung zu sein: https://github.com/docker/docker/issues/15036 – jap1968