Gestionarea fișierelor în imagine

Introducere în Docker

Tim Sangster

Software Engineer @ DataCamp

Copierea fișierelor într-o imagine

Instrucțiunea COPY copiază fișiere de pe mașina locală în imaginea construită:

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

Dacă destinația nu include un nume de fișier, se folosește numele original:

COPY /projects/pipeline_v3/pipeline.py /app/
Introducere în Docker

Copierea folderelor

Fără a specifica un nume de fișier în src-path, se copiază tot conținutul folderului.

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

COPY /projects/pipeline_v3/ /app/ va copia tot ce se află în pipeline_v3/:

/projects/
    pipeline_v3/
        pipeline.py
        requirements.txt
        tests/
            test_pipeline.py
Introducere în Docker

Copierea fișierelor dintr-un director părinte

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

Dacă directorul de lucru curent este projects/.

Nu putem copia init.py într-o imagine.

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

Descărcarea fișierelor

În loc să copieze fișiere local, acestea sunt adesea descărcate în timpul construirii imaginii:

  • Descărcarea unui fișier

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

  • Dezarhivarea fișierului

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

  • Ștergerea arhivei originale

RUN rm <copy_directory>/<filename>.zip

Introducere în Docker

Descărcarea eficientă a fișierelor

  • Fiecare instrucțiune care descarcă fișiere adaugă la dimensiunea totală a imaginii.
  • Chiar dacă fișierele sunt șterse ulterior.
  • Soluția este să descărcați, dezarhivați și ștergeți fișierele într-o singură instrucțiune.
RUN curl <file_download_url> -o <destination_directory>/<filename>.zip \
&& unzip <destination_directory>/<filename>.zip -d <unzipped-directory> \
&& rm <destination_directory>/<filename>.zip
Introducere în Docker

Rezumat

Utilizare Instrucțiune Dockerfile
Copierea fișierelor de pe gazdă în imagine COPY <src-path-on-host> <dest-path-on-image>
Copierea unui folder de pe gazdă în imagine COPY <src-folder> <dest-folder>
Nu se poate copia dintr-un director părinte al Dockerfile-ului COPY ../<file-in-parent-directory> /

Păstrați imaginile mici prin descărcare, dezarhivare și ștergere într-o singură instrucțiune RUN:

RUN curl <file_download_url> -o <destination_directory> \
&& unzip <destination_directory>/<filename>.zip -d <unzipped-directory> \
&& rm <destination_directory>/<filename>.zip
Introducere în Docker

Să exersăm!

Introducere în Docker

Preparing Video For Download...