Auf jeden Fall darauf achten, Caching Andockfenster. Grundsätzlich möchten Sie die stabilsten Anweisungen früher als weniger stabile Anweisungen ausführen. Anweisungen, die dazu führen würden, dass dieselben Bildänderungen wie bei einem früheren Lauf auftreten, sollten nicht erneut ausgeführt werden (ausgenommen Probleme mit ENV/ARG-Anweisungen). Sobald jedoch eine Anweisung ausgeführt werden muss, werden alle folgenden Anweisungen ausgeführt, unabhängig davon, was sich im Cache befindet.
.dockerignore wird auch helfen, aber es kann leicht für Dinge zu gleiten. Ich habe die Praxis der Umkehrung der Datei durch Ignorieren alles und dann genau angeben, was kopiert werden soll.
Um das Abrufen vom Web zu minimieren, benutze ich gerne den Garn-Offline-Cache. Dadurch werden die Tarballs der installierten Abhängigkeiten gespeichert und für zukünftige Installationen wiederverwendet. Sie erhalten den Vorteil über npm rebuild
von Neuinstallationen jedes Mal (wenn der Cache ungültig gemacht wurde). Sie konfigurieren den Offline-Cache mit einer .yarnrc-Datei, die sich in Ihrem Home-Verzeichnis befinden könnte, aber zu diesem Zweck behalten Sie einen in Ihrem Repo zusammen mit einem Verzeichnis zum Speichern der Tarballs bei.
Sie haben die Möglichkeit, das Spiegelverzeichnis in Ihren Repo einzuchecken. Eine typischerweise große npm-Modulinstallation wird immer noch nur in dem Bereich von 20 MB liegen.
Wenn Sie die folgenden Dateien verwenden, die auf Ihre Bedürfnisse zugeschnitten sind und yarn
lokal ausführen, enthält der Garn-Offline-Mirror die Tarballs, die für die Installation der App erforderlich sind.
.dockerignore
*
!yarn-offline-mirror/
!src/
!package.json
!yarn.lock
!.yarnrc
.yarnrc
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
yarn-offline-mirror "./yarn-offline-mirror"
Dockerfile
ENV HOME /usr/src/
WORKDIR $HOME
# copy the tarballs
COPY ["yarn-offline-mirror", "$HOME/yarn-offline-mirror/"]
# copy files needed for the install
COPY ["package.json", "yarn.lock", ".yarnrc", "$HOME/"]
# the offline flag will mean that an error is raised if any
# module needs to be fetched remotely. It can be removed to allow
# yarn to fetch any missing modules if that was to happen.
RUN yarn --offline --frozen-lockfile --link-duplicates
# copy the rest.. could be further broken up into multiple instructions
# for cache optimisation
COPY . $HOME
CMD npm start
Haben Sie in mit einem sah '.dockerignore-Datei zu Ihrer Einrichtung? –
@DanielD Weitere Details zum Ansatz? – Ancinek
Überprüfen Sie dies: https://docs.docker.com/engine/reference/builder/#dockerignore-file. Dies könnte Ihnen helfen. Es ähnelt der Verwendung einer '.gitigore'-Datei. Wenn es hilfreich aussieht, werde ich eine schnelle Antwort für die zukünftige Verwendung schreiben. –