Docker

How to Copy Multiple Files in One Layer Using a Dockerfile

When creating Docker images, it is a good practice to incorporate multiple files in a single layer to enhance the image layering procedure. Also, this approach makes the Dockerfile more concise and saves the time and hassle at the programmer’s end while building the containers. Moreover, it enables the developer to ensure that all the required files are contained in the container conveniently, thereby streamlining the deployment process.

This article covers the following aspects:

How to Copy Multiple Files in One/Single Layer Utilizing a Dockerfile?

The multiple files can be copied via the “COPY” instruction that enables the programmer to copy files/directories from the build context to the container’s file system.

Syntax

COPY <source> <destination>

 

In the above-given syntax:

  • <source>”: Indicates the source file/directory on the host machine.
  • <destination>”: Refers to the destination/target directory in the container’s file system.

Approach 1: Copying Multiple Files in a Single Layer Via the “COPY” Instruction

Let’s say we have four copy layers in the below-given Dockerfile:

COPY README.md ./
COPY package.json ./
COPY gulpfile.js ./
COPY __BUILD_NUMBER ./

 

Now, to copy these files utilizing a single layer instead, write the following code lines:

COPY [
    "__BUILD_NUMBER ./",
    "README.md ./",
    "gulpfile ./",
    "another_file ./",
]

 

Alternatively, the following code statements can be applied:

COPY README.md package.json gulpfile.js __BUILD_NUMBER ./

 

COPY ["__BUILD_NUMBER", "README.md", "gulpfile", "another_file", "./"]

 

Approach 2: Copying Multiple Files in a Single Layer Utilizing Wildcards

Wildcards” enables the developer to match patterns and copy various files, lessening the required individual “COPY” instructions. These can be utilized combined with the COPY instruction and the wildcard characters can be utilized in the source file specification by overviewing this guide.

Also, the following table can also be used to conveniently make use of wildcards:

Wildcard Functionality
‘?’ Matches a character(single).
‘*’ Matches any character sequence.
‘**’ Matches a directory and its subdirectories.
‘{}’ Matches particular patterns in alternatives. (e.g., {*.txt, *.md} matches entire files with .txt or .md extension).

 

Conclusion

The multiple files can be copied in one layer via a Dockerfile using the “COPY” instruction or utilizing the wildcards. The former approach is recommended as it allows to accumulate the files within a square bracket separated by commas, thereby streamlining the code functionalities.

About the author

Umar Hassan

I am a Front-End Web Developer. Being a technical author, I try to learn new things and adapt with them every day. I am passionate to write about evolving software tools and technologies and make it understandable for the end-user.