Dockerfile 中 COPY 和 ADD 命令的区别
Dockerfile 是包含用于构建 Docker 映像的所有命令的文本文档。 最近,我们已经看到 Docker 被广泛用作管理配置和自动化部署的默认工具。
使用 Dockerfile 的高级功能(例如自动构建)是开发人员采用 Docker 的原因。 其他包括将应用程序与其运行的环境隔离开来,并快速确保安全。
在创建 Docker 容器时,经常需要将文件从宿主机传输到 Docker 镜像中。 这些文件可以包括您的应用程序运行所需的库或属性文件。
Dockerfile 中 COPY 和 ADD 命令的区别
在 Dockerfile 中,我们可以使用 COPY 或 ADD 命令复制这些文件。 这些命令在功能上是相同的; 但是,存在一些差异。
COPY 和 ADD 命令遵循以下语法。
COPY <src> <dest>
ADD <src> <dest>
这两条指令都复制位于本地主机中 <src>
的文件或目录,并将它们添加到容器文件系统中的 <dest>
位置。 例如,在下面的 Dockerfile 中,我们将文件从当前目录复制到 Docker 镜像中的 /var/www 目录中。
# base image
FROM python
# Set your working directory
WORKDIR /var/www/
# Copy the necessary files
COPY ./app.py /var/www/app.py
ADD./requirements.txt /var/www/requirements.txt
# Install the necessary packages
RUN pip install -r /var/www/requirements.txt
ADD mkdir -p /var/www/new_directory
# Run the app
CMD ["echo", "Hello, Developer"]
我们要复制 app.py 和 requirements.txt 文件。 现在,如果我们构建这个 Docker 镜像,并用它来创建一个 Docker 容器,那么我们一定能够在 Docker 容器的文件系统中找到这两个文件。
下面的示例将基于上面的 Dockerfile 构建一个 Docker 镜像。
~/my-app$ Docker build -t new-image .
有了镜像后,我们将使用 docker run
命令创建一个 Docker 容器。 除此之外,我们还将在容器内启动 bash。
代码:
~/my-app$ Docker run -it new-image bash
如果我们列出 /var/www 目录中的文件,您应该会同时看到 app.py 和 requirements.txt 文件。
代码:
root@841d1e8d8c25:/var/www# ls
app.py new_directory requirements.txt
在上面的 Docker 容器中,ADD
和 COPY
命令都允许我们将文件从主机目录复制到 Docker 目录。
但是,在将文件复制到 Docker 容器中时,我们建议使用 COPY
命令。
根据 docker-file 最佳实践,当我们不需要比复制本地文件更多的功能时,
COPY
命令更合适。
另一方面,ADD 命令具有更多功能。 例如,您可以使用此命令将本地 tar 文件提取到 Docker 映像中。
除此之外,ADD 命令还支持远程 URL,而这两个操作是 COPY 命令无法实现的。 如果您试图减小正在构建的 Docker 映像的大小,则前一个命令可能并不理想。
这是因为 ADD 命令可能会显着增加 Docker 映像的大小,尤其是当它从远程 URL 获取包时。
使用 ADD 命令仅从主机复制文件可能会导致文件被意外复制到 Docker 映像的文件系统中。
总之,虽然这两个命令有相似之处并且可以互换使用,但您应该坚持使用 COPY
命令。 另一方面,ADD
命令只能在需要时使用,并且要格外小心。
相关文章
在 Linux 中托管 Docker Internal
发布时间:2023/04/18 浏览次数:139 分类:Docker
-
Docker 允许开发人员通过将应用程序包装在称为容器的标准化单元中来高效地构建、测试和部署应用程序。 在使用 Docker 容器时,您可能会遇到需要将容器与主机连接的场景。
在 Docker 中设置工作目录
发布时间:2023/04/18 浏览次数:82 分类:Docker
-
在 Docker 中,我们可以通过编辑 Dockerfile 并添加密钥 WORKDIR 来设置我们的工作目录。本文将讨论在 Docker 中更改我们当前和默认的工作目录。
在 Docker 容器中公开多个端口
发布时间:2023/04/18 浏览次数:143 分类:Docker
-
Docker 容器使用端口来实现万维网上不同设备之间的通信。 在本篇文章中,我们将学习如何使用 Nginx 应用程序在 Docker 容器中公开多个端口。
将用户添加到 Docker 容器
发布时间:2023/04/18 浏览次数:187 分类:Docker
-
在本文中,我们将学习如何通过实现返回产品数组的 Express 应用程序将用户添加到 Docker 容器。
使用 Docker 网络主机命令
发布时间:2023/04/18 浏览次数:112 分类:Docker
-
在本文中,我们将学习如何使用 --network 命令将容器添加到主机网络。 如果我们不使用此命令指定网络,我们还将了解如何将容器添加到默认网络。
清除 Docker 容器日志
发布时间:2023/04/18 浏览次数:181 分类:Docker
-
本文介绍了我们可以用来清除 docker 容器中日志的不同方法。日志是应用程序在特定事件或状态发生时记录的信息,它们帮助我们监控应用程序并采取必要的措施。