COPY and ADD are both Dockerfile instructions that does similar operation. Both instructions are used to copy files into a Docker image. Lets look at some use cases for both.
COPY instruction in a Dockerfile
- The COPY instruction copies files or directories into the Docker image.
- It takes a src and destination as arguments.
- Source can be absolute or relative from current WORKDIR or wild cards.
- Destination path can be absolute or relative to current WORKDIR.
Examples:
COPY ./requirements.txt /app/requirements.txt
COPY package.json package-lock.json /app
COPY package*.json /app
COPY . /app
Using COPY instruction to add source code into Docker Image
FROM python:3.8.0
# set working directory
WORKDIR /app
# add requirements
COPY ./requirements.txt /app/requirements.txt
# install requirements
RUN pip install -r requirements.txt
# copy source code to /app
COPY . /app
# run server
CMD python main.py
# expose
EXPOSE 5000
ADD instruction in a Dockerfile
- The ADD instruction copies files, directories, remote file or tar archive into the Docker image.
- It takes a src and destination as arguments.
- Source can be files and directories.
- Source can be a URL. The ADD instruction will download the file from the URL and save it to the destination. We don’t need to use curl or wget to download a file.
- Source can be a local tar/zip archive. The ADD instruction will automatically extract it to the destion. We don’t need to run unarchive commands manually.
- Use ADD when you want download a file from a URL or extract local archive file.
ADD ./example.tar.gz /tmp/
ADD https://bootstrap.pypa.io/get-pip.py /get-pip.py
Using ADD instruction to update pip package manager
FROM python:3.8.0
# set working directory
WORKDIR /app
# add requirements
COPY ./requirements.txt /app/requirements.txt
# updating pip
ADD https://bootstrap.pypa.io/get-pip.py /get-pip.py
RUN python /get-pip.py
# install requirements
RUN pip install -r requirements.txt
# add source code
COPY . /app
# run server
CMD python main.py
# expose
EXPOSE 5000