迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 > Docker >

Dockerfile 中 COPY 和 ADD 命令的区别

作者:迹忆客 最近更新:2023/04/17 浏览次数:

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 .

基于 Dockerfile 构建 Docker 镜像

有了镜像后,我们将使用 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 容器中,ADDCOPY 命令都允许我们将文件从主机目录复制到 Docker 目录。

但是,在将文件复制到 Docker 容器中时,我们建议使用 COPY 命令。

根据 docker-file 最佳实践,当我们不需要比复制本地文件更多的功能时,COPY 命令更合适。

另一方面,ADD 命令具有更多功能。 例如,您可以使用此命令将本地 tar 文件提取到 Docker 映像中。

除此之外,ADD 命令还支持远程 URL,而这两个操作是 COPY 命令无法实现的。 如果您试图减小正在构建的 Docker 映像的大小,则前一个命令可能并不理想。

这是因为 ADD 命令可能会显着增加 Docker 映像的大小,尤其是当它从远程 URL 获取包时。

使用 ADD 命令仅从主机复制文件可能会导致文件被意外复制到 Docker 映像的文件系统中。

总之,虽然这两个命令有相似之处并且可以互换使用,但您应该坚持使用 COPY 命令。 另一方面,ADD 命令只能在需要时使用,并且要格外小心。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 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 容器中日志的不同方法。日志是应用程序在特定事件或状态发生时记录的信息,它们帮助我们监控应用程序并采取必要的措施。

Docker 中的守护进程日志位置

发布时间:2023/04/18 浏览次数:175 分类:Docker

本文将讨论守护进程事件以及我们通常可以在哪里找到每个操作系统 (OS) 的守护进程日志。

Docker 中的 --rm 标志

发布时间:2023/04/18 浏览次数:77 分类:Docker

本文介绍如何在 docker 中使用 --rm 命令。 此外,它还提供了使用命令的优势。

在 Docker 中设置环境变量

发布时间:2023/04/18 浏览次数:107 分类:Docker

本文教大家如何设置环境变量以及如何在必要时从正在运行的容器访问变量。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便