Gerenciando arquivos na sua imagem

Introdução ao Docker

Tim Sangster

Software Engineer @ DataCamp

Copiando arquivos para a imagem

A instrução COPY copia arquivos da sua máquina local para a imagem em construção:

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

Se o destino não incluir um nome de arquivo, o original é mantido:

COPY /projects/pipeline_v3/pipeline.py /app/
Introdução ao Docker

Copiando pastas

Sem especificar um nome de arquivo em src, todo o conteúdo é copiado.

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

COPY /projects/pipeline_v3/ /app/ vai copiar tudo dentro de pipeline_v3/:

/projects/
    pipeline_v3/
        pipeline.py
        requirements.txt
        tests/
            test_pipeline.py
Introdução ao Docker

Copiar de um diretório pai

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

Se o diretório de trabalho atual for projects/.

Não dá para copiar init.py para a imagem.

docker build -t pipeline:v3 .
 => ERROR [4/4] COPY ../init.py /     0.0s
failed to compute cache key: "../init.py" not found: not found
Introdução ao Docker

Baixando arquivos

Em vez de copiar de um diretório local, é comum baixar arquivos durante o build da imagem:

  • Baixar um arquivo

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

  • Descompactar o arquivo

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

  • Remover o zip original

RUN rm <copy_directory>/<filename>.zip

Introdução ao Docker

Baixando arquivos com eficiência

  • Cada instrução que baixa arquivos aumenta o tamanho da imagem.
  • Mesmo que os arquivos sejam apagados depois.
  • A solução: baixar, descompactar e remover em uma única instrução.
RUN curl <file_download_url> -o <destination_directory>/<filename>.zip \
&& unzip <destination_directory>/<filename>.zip -d <unzipped-directory> \
&& rm <destination_directory>/<filename>.zip
Introdução ao Docker

Resumo

Uso Instrução do Dockerfile
Copiar arquivos do host para a imagem COPY <src-path-on-host> <dest-path-on-image>
Copiar uma pasta do host para a imagem COPY <src-folder> <dest-folder>
Não dá para copiar do diretório pai de onde o Dockerfile é criado COPY ../<file-in-parent-directory> /

Mantenha as imagens pequenas baixando, descompactando e limpando em um único RUN:

RUN curl <file_download_url> -o <destination_directory> \
&& unzip <destination_directory>/<filename>.zip -d <unzipped-directory> \
&& rm <destination_directory>/<filename>.zip
Introdução ao Docker

Vamos praticar!

Introdução ao Docker

Preparing Video For Download...