如何在docker 数据容器容器之间拷贝数据

主题信息(必填)
主题描述(最多限制在50个字符)
申请人信息(必填)
申请信息已提交审核,请注意查收邮件,我们会尽快给您反馈。
如有疑问,请联系
如今的编程是一场程序员和上帝的竞赛,程序员要开发出更大更好、傻瓜都会用到软件。而上帝在努力创造出更大更傻的傻瓜。目前为止,上帝是赢的。个人网站:。个人QQ群:、
个人大数据技术博客:
配置一个数据科研环境是一个非常痛苦的过程。比如处理各个软件包版本的一致性问题,必须非常深入理解并解决模糊晦涩的错误消息,再加上无数漫长的等待各个包的编译过程是非常令人沮丧的。这成为了数据科研难以上手的首要因素,并且是完全的没有规律可循。在过去的几年中我们能看到有多种技术产生,来帮助我们创建隔离化的环境。在此我们将主要关注一个技术:Docker。Docker的出现让创建一个新的数据科研环境变得更快更容易,并且可以引入如Jupyter这样的工具来帮助探索你的数据。基于Docker,我们可以下载一个镜像文件,其中已经包含了一系列的软件包和数据科研工具。我们可以基于这个镜像在极短时间内启动数据科研环境,不必花费漫长的时间来人工挨个安装编译各个软件包。这个环境就是Docker容器。容器可以帮助我们消除配置问题,即当容器被启动时,它就已经是一个所有软件包都正常工作的良好状态。除了降低数据科研的入门门槛,Docker也可以用于快速创建虚拟环境来隔离不同的Python和其他软件包版本,而不再需要漫长的逐个安装过程。在这个文章中,我们将会覆盖基本的Docker操作,在你自己的机器上:如何安装,如何利用Docker容器快速启动数据科研。虚拟机创建虚拟机的软件技术已经存在的几十年。虚拟机允许你在自己的机器上模拟其他机器环境。比如,你可以在虚拟机上跑Linux,即使你的物理机上跑的是windows。这将让你使用Linux,而不必实际在机器上安装它,它将是完全虚拟运行的,所以你能在windows之中使用Linux。实质上,你可以点击一个程序,然后Linux的桌面就会在Windows之中弹出。虚拟机使用镜像来启动,你必须使用所需要对应的操作系统镜像来启动虚拟机。假如你需要使用Linux,你必须使用包含所有必须文件的Linux镜像来创建这样的Linux环境。一个在Linux上跑Windows的例子容器虽然虚拟机运行你在Windows上进行Linux的开发,但是它们也会有一些负面影响。虚拟机启动的时间会更长,会占用显著的系统资源,而且很难基于一个虚拟机镜像之上安装其他软件包,并以此创建新的镜像。Linux容器解决了这个问题,使得多个隔离的环境可以在同一台机器上运行。你可以把容器想象成更快,更方便的方式去使用虚拟机。不幸的是,容器的使用有点棘手,并且容器的镜像管理和分发并不那么容易。我们所需要的功能是,让我们能快速下载并启动基于特殊的软件包和工具配置的数据科研环境。例如,你可能希望能快速启动一个已经包含了Jupyter,spark,pandas等软件包的镜像。DockerDocker容器是基于Linux容器之上的一个封装层,使得容器更容易被管理和分发。Docker也让我们能够更方便的下载对应一系列特定软件包的镜像,并快速启动。同时它也是跨平台的,可以工作于Mac,Windows,Linux。虚拟环境同样具备这些优点,比如创建隔离化的Python环境。那么Docker比虚拟机环境更加有优势的是哪些:
快速启动。当你需要启动项目并分析数据时,你完全不需要等待任何软件包安装。
良好配置。大多数时候,Python软件包需要其他系统包以及配置的支持。这可能导致一些奇怪的问题。基于Docker,这些都已经被安装和配置完毕。
跨平台一致性。Python软件包是跨平台的,但是部分行为在Linux和Windows上是不一样的,并且部分相关库是无法在Windows上安装的。Docker容器总是运行于Linux环境内,所以它们永远一致。
设立检查点并恢复。你可以在Docker镜像中安装新软件包,然后基于这个检查点创建新的镜像。这样就可以很方便的回滚之后所做的任何改动和配置。
每一个Docker镜像运行都会创建一个Docker容器。对于我们的目的,我们可以在容器内运行Jupyter,并且使用网络浏览器来观察分析我们的数据。安装Docker第一步就是安装Docker。在Windows和Mac上有很方便的图形化界面安装程序。下面就是具体规格操作系统下的安装指导:
作为安装程序的一部分,你会需要先打开一个命令提示符窗口,或者也被称为终端或者命令行窗口。是一种文本界面,而不是图形化运行的计算机命令交互接口。比如,你即可以通过在windows下双击“notepad”来启动一个文本编辑器,也可以在Linux的终端下键入命令“nano”来实现同样的效果。每个操作系统都会有相应的预配置好的命令提示符来应用Docker命令。更多信息见如下:
Mac OS - 从启动面板来启动Docker快速启动终端。更多细节在此
- 启动任意bash终端,Docker都已经准备好
Windows- 从桌面上点击启动Docker快速启动终端。更多细节在此
在接下来的操作中,你也会需要使用同样的命令提示符来执行任意文章提及的Docker命令。
下载镜像下一步就是下载你所需要的镜像。以下是我们当前已有的数据科研镜像:
- dataquestio/python3-starter – 这个包含了Python 3,Jupyter notebook以及其他很多热门的数据科研库,比如:numpy, pandas, scipy, scikit-learn,nltk.
- dataquestio/python2-starter – 这个包含了Python 2,Jupyter notebook以及其他很多热门的数据科研库,比如:numpy, pandas, scrapy,scipy, scikit-learn,nltk.你可以通过键入 Docker pull IMAGE_NAME来下载你所需要的镜像。比如,你需要下载dataquestio/python3-starter,你需要在命令提示符里键入docker pull dataquestio/python3-starter。这个的目的就是从Docker hub(比如GitHub)下载镜像文件到你的机器上,然后你就可以启动容器并使用这些镜像。运行镜像一旦镜像已经被下载,你就可以开始通过命令Docker run运行它。我们需要设置少数几个参数来保证它正确配置和执行。
-p :该标志指定端口号用于我们从本地机器访问容器内的Jupyter服务器
-d :该标志指定容器派遣模式,并在后台运行
-v :该标志指定Jupyter可以访问存储数据的本地机器目录
这里你应该把/home/vik/notebooks换成你实际存储Jupyter数据的文件夹。并且把dataquestio/python3-starter换成你实际使用的Docker镜像。执行docker run即可生成Docker容器。它是从你的本地机器上隔离的,你甚至可以把它想象成一个独立的机器。在容器内部,Jupyter将会运行,并且我们可以访问许多其他数据科研软件。Docker run执行之后会打印输出一长字符串。这个字符串即是你容器的唯一标识,并且它也被用于修改容器,该唯一的标识会把它和其他容器区别开来。从现在开始我们将把它作为容器的标识。查看Jupyter服务器假如你当前跑在Linux上,下一步非常简单-直接访问localhost:8888即可,你应该能够看到Jupyter正在执行。如果你是跑在Windows或者OSX上,那么你需要按照之前给出Docker的安装文档指示,使用Docker安装步骤中的docker-machine。假设你的本地机器名为default,那么执行docker-machine ip default将会告诉你当前你的Docker容器的IP地址。假如你机器用的是不同名字,那么简单替换掉命令中的default即可。然后你可以通过CONTAINER_IP:8888来看到你当前Jupyter的运行情况(这里需要把CONTAINER_IP替换为之前查询到的容器IP)。制作Jupyter笔记在这一步,你可以生成一个新的Jupyter笔记来测试系统的工作情况。尝试执行一段scikit代码,更多示例见此:from sklearn import datasets
from sklearn.cross_validation import cross_val_predict
from sklearn import linear_model
import matplotlib.pyplot as plt
%matplotlib inline
lr = linear_model.LinearRegression()
boston = datasets.load_boston()
y = boston.target
predicted = cross_val_predict(lr, boston.data, y, cv=10)
fig, ax = plt.subplots()
ax.scatter(y, predicted)
ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)
ax.set_xlabel('Measured')
ax.set_ylabel('Predicted')
plt.show()增加数据文件假如你需要往这个环境中添加数据文件,你有三种选择。第一个是把它们放到你之前创建的给Jupyter用的文件夹中。放在这个位置的任意文件都自动能被Jupyter访问到。第二种方法是使用docker cp命令。Docker CP能够从本地机器中拷贝文件到容器中,反之亦然。假设你想要拷贝一个文件/home/vik/data.csv到容器(其ID为4greg24134)中。你可以输入命令如下docker cp /home/vik/data.csv 4greg24134:/home/ds/notebooks,这就把data.csv拷贝到了容器的notebooks目录下。当然,你可以把文件拷贝到任意位置,把它们拷贝到notebooks目录只是为了让Jupyter访问方便。第三种是使用Jupyter笔记主页面右上角的上传按钮。你可以选择文件并直接上传到容器中的notebooks目录。无论你使用哪种方法,你还需要使用下列命令在Jupyter内部加载这些数据文件。import pandas
data = pandas.read_csv("data.csv")从容器中拷贝文件你可能也需要从容器中拷贝文件到你的本地机器上。最简单的办法就是把这些文件放在/home/ds/notebooks文件夹里,这样它们就会被自动镜像到你的本地机器。另一个选项是同样使用Docker cp。假如你需要拷贝容器(id为4greg24134 )内文件/home/ds/notebooks/data.csv到你本地机器的文件夹/home/vik/。你可以键入如下命令:docker cp 4greg24134:/home/ds/notebooks/data.csv /home/vik/data.csv。最后一个办法是使用Jupyter的下载。点击浏览器内的任意非笔记格式文件,它就会被下载到你本地机器。假如是需要下载Jupyter笔记文件,那么点击该文件并且选择“Download as”即可下载它到你的本地机器。安装更多的包如果你需要在容器内安装你自己的软件包,你可以进入容器并执行任何正常的bash命令。你需要首先执行docker exec来进入容器。Docker exec的执行需要输入指定的容器id以及命令。例如,键入docker exec -it 4greg24134 /bin/bash就会打开容器为id 4greg24134的命令提示符。这里的-it标识是标明我们要保持输入会话并且键入命令。在执行Docker exec后,你会被放到一个容器内的命令提示符。Python在容器的虚拟环境中已经在运行,它被称为ds,并且应该已经是被激活的。假设你需要安装任何包,只需要键入pip install PACKAGE_NAME。例如你可以用如下命令安装requests,pip install requests。当你需要退出容器的命令提示符时,键入exit即可。关闭docker容器当工作完成后,我们应当关闭docker容器。使用命令docker rm -f CONTAINER_ID来停止容器。这里的容器id就是之前我们所得到的id。假如你没有,可以使用docker ps来查询。你的Jupyter笔记会仍然存在于本地机器中,即使在容器被关闭之后,它仍会保存在你之前创建的文件夹。创建容器镜像容器镜像由Dockerfiles来创建。Dockerfiles会标明哪些包和工具应该被安装到具体的镜像中。你可以通过修改Dockerfiles来变更镜像中的任意默认包和工具。假如你想基于这个文章中我们所讨论过的镜像来创建新的镜像。你可以贡献它们到Github上,这里包含了dockerfiles。我们也欢迎任何帮助我们改善当前镜像,或者是贡献新的不仅仅是针对Python的工具镜像。原文链接: (译者/王旭敏 责编/仲浩)关于译者:王旭敏,Nokia开发工程师,关注云计算、高性能或可用等架构、容器等。如何在Docker容器之间拷贝数据_百度知道
如何在Docker容器之间拷贝数据
提问者采纳
/lib/ /sbin&#47. 在主机上拷贝文件;rootfs/lib/var/ /FULL_CONTAINER_ID/devicemapper/ d8e703d7e303
d8e703d7ed01bd7fb58d59eb16c4b83cf
$docker/{{;&file/target
从主机上拷贝文件到容器内1; /
步骤A获取的名称或者id
C;path/path/to/mnt&#47. 获取容器名称或者;aufs/to/host/container /sourcefile /file/bash -c 'path//var/123abc&lt.用-v挂载主机数据卷到容器内[plain] view plaincopydocker run -v &#47.直接在主机上拷贝到容器物理存储系统A;host/&sshd -D
cranky_pare
$ docker inspect -f
'mnt/path/mnt/path/container/mnt/{{;path/bin/path/file/to/file'to/lib/to&#47.txt /hostdir:[plain] view plaincopy$ docker ps
CONTAINER ID
d8e703d7e303
solidleon&#47:[plain] view plaincopy$ sudo cp path-file-host &#47:/ cranky_pare
$ docker inspect -f
'mnt $container
在容器内拷贝
cp / /**d8e703d7ed01bd7fb58d59eb16c4b83cf
3;cat &gt. 获取整个容器的id[plain] view plaincopy$ docker inspect -f
'destfile
2;container&#47:[plain] view plaincopy$ docker ps
B;file&#39.用输入输出符 [plain] view plaincopydocker run -i ubuntu /
或者[plain] view plaincopydocker exec -it &lt.Id}}'var/root
例子;docker/PATH-NEW-FILE
$ sudo cp path-file-host /aufs/to/id&docker/usr&#47.Id}}&#39:&#47.Id}}' bash -c 'path/cat & &host/container_id& &lt从容器内拷贝文件到主机上[plain] view plaincopydocker cp &containerId&{{;within&#47
来自团队:
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!}

我要回帖

更多关于 拷贝文件到docker 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信