Керування файлами у вашому образі

Вступ до Docker

Tim Sangster

Software Engineer @ DataCamp

COPY файлів в образ

Інструкція COPY копіює файли з локальної машини в образ, який ми збираємо:

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

Якщо в шляху призначення немає назви файла, використовується оригінальна:

COPY /projects/pipeline_v3/pipeline.py /app/
Вступ до Docker

COPY папок

Якщо не вказати назву файла в src-path, буде скопійовано весь вміст папки.

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

COPY /projects/pipeline_v3/ /app/ скопіює все з pipeline_v3/:

/projects/
    pipeline_v3/
        pipeline.py
        requirements.txt
        tests/
            test_pipeline.py
Вступ до Docker

Копіювання файлів із батьківського каталогу

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

Припустімо, наш поточний робочий каталог — у папці projects/.

Ми не можемо скопіювати init.py в образ.

docker build -t pipeline:v3 .
 => ERROR [4/4] COPY ../init.py /     0.0s
failed to compute cache key: "../init.py" not found: not found
Вступ до Docker

Завантаження файлів

Замість копіювання з локального каталогу файли часто завантажують під час збірки образу:

  • Завантажити файл

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

  • Розпакувати файл

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

  • Видалити оригінальний zip-файл

RUN rm <copy_directory>/<filename>.zip

Вступ до Docker

Ефективне завантаження файлів

  • Кожна інструкція завантаження додає до загального розміру образу.
  • Навіть якщо файли потім видаляються.
  • Рішення: завантажити, розпакувати й видалити файли в одній інструкції.
RUN curl <file_download_url> -o <destination_directory>/<filename>.zip \
&& unzip <destination_directory>/<filename>.zip -d <unzipped-directory> \
&& rm <destination_directory>/<filename>.zip
Вступ до Docker

Підсумок

Використання Інструкція Dockerfile
Копіювати файли з хоста в образ COPY <src-path-on-host> <dest-path-on-image>
Копіювати папку з хоста в образ COPY <src-folder> <dest-folder>
Не можна копіювати з батьківського каталогу, де збирається Dockerfile COPY ../<file-in-parent-directory> /

Тримайте образи малими: завантажуйте, розпаковуйте й прибирайте в одній інструкції RUN:

RUN curl <file_download_url> -o <destination_directory> \
&& unzip <destination_directory>/<filename>.zip -d <unzipped-directory> \
&& rm <destination_directory>/<filename>.zip
Вступ до Docker

Давайте потренуємось!

Вступ до Docker

Preparing Video For Download...