Gestion des fichiers dans votre image

Présentation de Docker

Tim Sangster

Software Engineer @ DataCamp

Copier des fichiers dans une image

L'instruction COPY copie les fichiers de notre ordinateur local vers l'image que nous sommes en train de compiler :

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 le chemin de destination ne comporte pas de nom de fichier, le nom de fichier d'origine est utilisé :

COPY /projects/pipeline_v3/pipeline.py /app/
Présentation de Docker

Copie des dossiers

Si aucun nom de fichier n'est spécifié dans le chemin src, tout le contenu du fichier sera copié.

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

COPY /projects/pipeline_v3/ /app/ copiera tout ce qui se trouve sous pipeline_v3/ :

/projects/
    pipeline_v3/
        pipeline.py
        requirements.txt
        tests/
            test_pipeline.py
Présentation de Docker

Copier les fichiers depuis un répertoire parent

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

Si notre répertoire de travail actuel se trouve dans le dossier projects/.

Il n'est pas possible de copier init.py dans une image.

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

Téléchargement de fichiers

Au lieu de copier les fichiers à partir d'un répertoire local, les fichiers sont souvent téléchargés lors de la compilation de l'image :

  • Télécharger un fichier

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

  • Décompresser le fichier

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

  • Supprimer le fichier zip original

RUN rm <copy_directory>/<filename>.zip

Présentation de Docker

Téléchargement efficace de fichiers

  • Chaque instruction qui télécharge des fichiers augmente la taille totale de l'image.
  • Même si les fichiers sont supprimés ultérieurement.
  • La solution consiste à télécharger, décompresser et supprimer les fichiers en une seule instruction.
RUN curl <file_download_url> -o <destination_directory>/<filename>.zip \
&& unzip <destination_directory>/<filename>.zip -d <unzipped-directory> \
&& rm <destination_directory>/<filename>.zip
Présentation de Docker

Récapitulatif

Utilisation Instruction Dockerfile
Copier les fichiers de l'hôte vers l'image COPY <src-path-on-host> <dest-path-on-image>
Copier un dossier de l'hôte vers l'image COPY <src-folder> <dest-folder>
Nous ne pouvons pas copier à partir d'un répertoire parent où nous construisons un fichier Dockerfile COPY ../<file-in-parent-directory> /

Réduisez la taille des images en les téléchargeant, en les décompressant et en les nettoyant à l'aide d'une seule instruction RUN :

RUN curl <file_download_url> -o <destination_directory> \
&& unzip <destination_directory>/<filename>.zip -d <unzipped-directory> \
&& rm <destination_directory>/<filename>.zip
Présentation de Docker

Passons à la pratique !

Présentation de Docker

Preparing Video For Download...