Gestionar archivos en tu imagen

Introducción a Docker

Tim Sangster

Software Engineer @ DataCamp

Copiar archivos a una imagen con COPY

La instrucción COPY copia archivos desde tu máquina local a la imagen en construcción:

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

Si la ruta de destino no incluye nombre de archivo, se usa el original:

COPY /projects/pipeline_v3/pipeline.py /app/
Introducción a Docker

Copiar carpetas con COPY

Si no indicas un nombre de archivo en src, se copiará todo el contenido.

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

COPY /projects/pipeline_v3/ /app/ copiará todo lo de pipeline_v3/:

/projects/
    pipeline_v3/
        pipeline.py
        requirements.txt
        tests/
            test_pipeline.py
Introducción a Docker

Copiar desde un directorio padre

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

Si nuestro directorio de trabajo actual está en projects/.

No podemos copiar init.py a una imagen.

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

Descargar archivos

En lugar de copiar desde un directorio local, a menudo se descargan archivos durante el build de la imagen:

  • Descargar un archivo

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

  • Descomprimir el archivo

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

  • Borrar el zip original

RUN rm <copy_directory>/<filename>.zip

Introducción a Docker

Descargar archivos de forma eficiente

  • Cada instrucción que descarga archivos aumenta el tamaño total de la imagen.
  • Incluso si luego borras los archivos.
  • La solución: descargar, descomprimir y eliminar en una sola instrucción.
RUN curl <file_download_url> -o <destination_directory>/<filename>.zip \
&& unzip <destination_directory>/<filename>.zip -d <unzipped-directory> \
&& rm <destination_directory>/<filename>.zip
Introducción a Docker

Resumen

Uso Instrucción Dockerfile
Copiar archivos del host a la imagen COPY <src-path-on-host> <dest-path-on-image>
Copiar una carpeta del host a la imagen COPY <src-folder> <dest-folder>
No se puede copiar desde el directorio padre al construir el Dockerfile COPY ../<file-in-parent-directory> /

Mantén las imágenes pequeñas descargando, descomprimiendo y limpiando en una sola instrucción RUN:

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

¡Vamos a practicar!

Introducción a Docker

Preparing Video For Download...