Dateien in deinem Image verwalten

Einführung in Docker

Tim Sangster

Software Engineer @ DataCamp

Dateien in ein Image kopieren

Der Befehl COPY kopiert Dateien von unserem lokalen Rechner in das Image, das wir erstellen:

COPY <src-path-on-host> <dest-path-on-image>
COPY /projects/pipeline_v3/pipeline.py /app/pipeline.py
docker build -t pipeline:v3 .
...
[4/4] COPY ./projects/pipeline_v3/pipeline.py /app/pipeline.py

Wenn der Zielpfad keinen Dateinamen hat, wird der ursprüngliche Dateiname benutzt:

COPY /projects/pipeline_v3/pipeline.py /app/
Einführung in Docker

Ordner kopieren

Wenn du keinen Dateinamen im src-Pfad angibst, werden alle Dateiinhalte kopiert.

COPY <src-folder> <dest-folder>
COPY /projects/pipeline_v3/ /app/

COPY /projects/pipeline_v3/ /app/ kopiert alles unter pipeline_v3/:

/projects/
    pipeline_v3/
        pipeline.py
        requirements.txt
        tests/
            test_pipeline.py
Einführung in Docker

Dateien aus einem übergeordneten Verzeichnis kopieren

/init.py
/projects/
    Dockerfile
    pipeline_v3/
        pipeline.py

Wenn unser aktuelles Arbeitsverzeichnis im Ordner projects/ liegt, ...

... können wir init.py nicht in ein Image einfügen.

docker build -t pipeline:v3 .
 => ERROR [4/4] COPY ../init.py /     0.0s
failed to compute cache key: "../init.py" not found: not found
Einführung in Docker

Dateien herunterladen

Anstatt Dateien aus einem lokalen Verzeichnis zu kopieren, werden sie beim Erstellen des Images oft heruntergeladen:

  • Datei herunterladen

RUN curl <file-url> -o <destination>

  • Datei entpacken

RUN unzip <dest-folder>/<filename>.zip

  • Ursprüngliche ZIP-Datei entfernen

RUN rm <copy_directory>/<filename>.zip

Einführung in Docker

Dateien effizient herunterladen

  • Jede Anweisung, die Dateien herunterlädt, vergrößert das Image insgesamt.
  • Auch wenn die Dateien später gelöscht werden.
  • Die Lösung ist, Dateien mit einer einzigen Anweisung herunterzuladen, zu entpacken und zu löschen.
RUN curl <file_download_url> -o <destination_directory>/<filename>.zip \
&& unzip <destination_directory>/<filename>.zip -d <unzipped-directory> \
&& rm <destination_directory>/<filename>.zip
Einführung in Docker

Zusammenfassung

Verwendung Dockerfile-Anweisung
Dateien vom Host auf das Image kopieren COPY <src-path-on-host> <dest-path-on-image>
Einen Ordner vom Host auf das Image kopieren COPY <src-folder> <dest-folder>
Wir können nicht aus einem übergeordneten Verzeichnis kopieren, in welchem wir ein Dockerfile erstellen. COPY ../<file-in-parent-directory> /

Halte Images klein, indem du sie mit einem einzigen RUN-Befehl herunterlädst, entpackst und bereinigst:

RUN curl <file_download_url> -o <destination_directory> \
&& unzip <destination_directory>/<filename>.zip -d <unzipped-directory> \
&& rm <destination_directory>/<filename>.zip
Einführung in Docker

Lass uns üben!

Einführung in Docker

Preparing Video For Download...