Zarządzanie plikami w obrazie

Wprowadzenie do Dockera

Tim Sangster

Software Engineer @ DataCamp

Kopiowanie plików do obrazu

Instrukcja COPY kopiuje pliki z lokalnej maszyny do budowanego obrazu:

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

Jeśli ścieżka docelowa nie zawiera nazwy pliku, używana jest oryginalna nazwa:

COPY /projects/pipeline_v3/pipeline.py /app/
Wprowadzenie do Dockera

Kopiowanie folderów

Brak nazwy pliku w ścieżce źródłowej powoduje skopiowanie całej zawartości folderu.

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

COPY /projects/pipeline_v3/ /app/ skopiuje wszystko z pipeline_v3/:

/projects/
    pipeline_v3/
        pipeline.py
        requirements.txt
        tests/
            test_pipeline.py
Wprowadzenie do Dockera

Kopiowanie plików z katalogu nadrzędnego

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

Jeśli bieżący katalog roboczy to projects/.

Nie można skopiować init.py do obrazu.

docker build -t pipeline:v3 .
 => ERROR [4/4] COPY ../init.py /     0.0s
failed to compute cache key: "../init.py" not found: not found
Wprowadzenie do Dockera

Pobieranie plików

Zamiast kopiować pliki z lokalnego katalogu, często są one pobierane podczas budowania obrazu:

  • Pobieranie pliku

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

  • Rozpakowywanie pliku

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

  • Usuwanie oryginalnego archiwum zip

RUN rm <copy_directory>/<filename>.zip

Wprowadzenie do Dockera

Efektywne pobieranie plików

  • Każda instrukcja pobierająca pliki zwiększa całkowity rozmiar obrazu.
  • Nawet jeśli pliki zostaną później usunięte.
  • Rozwiązaniem jest pobieranie, rozpakowywanie i usuwanie plików w jednej instrukcji.
RUN curl <file_download_url> -o <destination_directory>/<filename>.zip \
&& unzip <destination_directory>/<filename>.zip -d <unzipped-directory> \
&& rm <destination_directory>/<filename>.zip
Wprowadzenie do Dockera

Podsumowanie

Zastosowanie Instrukcja Dockerfile
Kopiowanie plików z hosta do obrazu COPY <src-path-on-host> <dest-path-on-image>
Kopiowanie folderu z hosta do obrazu COPY <src-folder> <dest-folder>
Nie można kopiować z katalogu nadrzędnego względem Dockerfile COPY ../<file-in-parent-directory> /

Aby zachować małe rozmiary obrazów, należy pobierać, rozpakowywać i usuwać pliki w jednej instrukcji RUN:

RUN curl <file_download_url> -o <destination_directory> \
&& unzip <destination_directory>/<filename>.zip -d <unzipped-directory> \
&& rm <destination_directory>/<filename>.zip
Wprowadzenie do Dockera

Czas na ćwiczenia!

Wprowadzenie do Dockera

Preparing Video For Download...