如何在Docker中把一个文件从一个文件夹复制到容器中的另一个文件夹
简介
在这篇文章中,我们将讨论 “如何将文件以及目录从主机操作系统转移到Docker容器环境中”。对所有这些命令的需求是,很多时候,开发人员必须向Docker容器提供各种类型的文件,这些文件是配置文件、安全和认证文件、应用程序文件,以及更多。因此,这是一项非常简单而重要的任务,需要在Docker守护进程中创建或创建完Docker容器后执行。在创建Docker镜像和进一步从该镜像创建Docker容器时,也会用到一些命令。
命令的类型
在Docker容器上有两种类型的命令可以用来传输文件,一种是来自终端或CLI(命令行界面),另一种是在创建Docker文件时。我们也有一些Docker compose的范围来传输文件到Docker容器。
使用终端命令
为了让这些命令在你的系统上得到实施,Docker守护进程必须处于运行状态,因为这些命令是Docker客户端应用程序的基本命令。
主机到容器,容器到主机。
命令1:Docker cp
首先,我们需要创建一个测试的Docker容器,这里我们使用了busybox Docker镜像。使用这个命令可以在交互式和分离式模式下创建容器。
输出
现在容器已经被创建。
变化1 主机到容器
假设我们想把一个文本文件传输到从HOST到Docker Container的容器。
输入 text
现在使用下面的命令将其复制到 “cont1 “忙音盒容器。
命令的一般语法。 $ docker cp [source_path] [container:destination_path]
.
现在交叉检查该文件是否被复制到了容器中。首先,进入容器内部,然后检查该文件。
示例
在终端上打印该文件。
输出
示例
因此,文件被成功复制了。我们也可以不使用Docker容器的名称,而是使用容器的ID来复制文件。
输出
使用 “CONTAINER ID”。
变体2:集装箱到主机
要将文件从容器复制到主机,请将上例中使用的[source_path]和[destination_path]反过来。
进入容器内,创建一个文件 “test2.txt”,并将其传输到HOST。
输出
输入 text
现在从容器中退出,回到主机终端,执行以下命令,在主机上获得 “test2.txt “文件。
检查文件
输出
因此,复制是成功的。
变化3:Docker容器cp
命令 “docker cp “也可以作为 “docker container cp “使用,下面我们实现了同样的功能。没有什么需要改变的,所有的步骤都差不多。
命令2:Docker Volumes
另一种也是最常用的方式,从容器中获取文件的副本。这也有助于为容器创建持久的数据。列出系统中存在的所有docker卷。
现在创建你自己的卷 “数据库”,可以用来连接到任何一个容器。
句法 – docker volume create
检查该卷是否被创建。
输出
现在使用这个卷,并使用”-v “标签将其连接到一个容器。一般情况下
语法 – docker run -it -v volume-/container_directory image
让我们看看docker卷是否可以用来从容器中存储数据到主机。进入容器 “cont2″,创建一个文本文件,然后从容器中退出。
现在让我们创建一个新的容器 “cont3″,将同一个docker卷链接到这个容器,然后检查databasefile.txt是否存在。
因此,数据被成功保存和复制了。
使用Dockerfile
Dockerfile是用来通过添加各种层来创建docker镜像的。我们有一些层,可以帮助从主机或互联网上复制或传输数据到容器镜像中。
命令1:ADD
执行ADD命令可以有不同的目的。
变化1:提取压缩文件
一般语法 – ADD source_files_location destination_directory_path
默认情况下,如果给ADD一个压缩文件,这将提取该文件并在构建镜像时将其保存在容器镜像上。
但提取只限于存储在主机上的源文件。它不能提取网络存储的压缩文件。而且它对提取的扩展支持也很有限。
变体2:从网上复制
一般的语法和上面提到的一样,我们只需要给出文件的远程路径位置,而不是本地路径。
示例
假设我们想把Tutorialspoint网站的HTML网页下载到我们的apache webserver上,用于一些测试目的。我们使用下面的ADD层。
现在我们可以在我们的Docker容器上运行这个网页并进行测试。如果传递的链接是一个压缩文件,它不会提取文件,而是将其下载到所述路径。
命令2:复制
这个命令没有变化,它很简单,只执行一个任务,即把提到的文件复制到目的地。它不像我们在ADD命令中看到的那样进行提取,也不能从网上下载。
复制
命令3:RUN
Curl和Wget命令用于从网上复制文件。我们将在使用dockerfile准备镜像的时候使用这些命令。
结论
从本地和远程机器复制的原因如下。
-
复制配置文件。
-
复制应用程序的实际代码。
-
为测试目的从网上复制。
-
为测试目的从网上复制。
-
将容器数据复制到主机上,用于袋装持久性数据。