copy file to docker、
2014-12-04 16:34
405 查看
Docker是个Linux Container管理软件.
今天我们来讲解一下从主机复制文件到Docker的几种方法.
在分享之前, 我们看看Docker社区对这个问题的需求是有多么强(ju)烈(jin).
下面开始今天高(tu)大(yuan)上(fei)的分享.
1. 通过Build Docker Image添加文件
Docker Image是通过Dockerfile来创建的. 具体的创建过程可以参考这里.我们可以在编写Dockerfile的时候, 将需要的文件通过
ADD关键字添加文件到Docker Image里面.
FROM 3scale/openresty ## add your supervisor openresty config ADD openresty.conf /etc/supervisor/conf.d/ # Add your app ADD . /var/www CMD ["supervisor"]
引用自 3scale/openresty
这个Dockerfile中的
ADD关键字是将本机添加到Docker Image中的
/var/www文件夹中.
2. 通过docker run命令的-v/--volume参数
假设我们需要将本机的/data 目录分享到Docker的/mnt 目录下, 我们可以通过这样的命令:$ touch /data/bilibala $ docker run -v /data:/mnt -i -t ubuntu bash root@c039a83c35d0:/# ls /mnt bilibala
这个命令可以在启动container中绑定文件夹.
3. 通过API绑定目录
其实这个方法本质上跟2是一样的, 但是唯一不同的就是, API将docker run这个命令分成两步了, 分别是:
create_container和
start在
create_container中, 通过
volumes参数定义需要挂载的目录. 在
start中,
binds参数绑定.
下面是一个简单的example:
#!/usr/bin/env python2.7 import docker c = docker.Client() container = c.create_container('ubunt', command='bash', volumes=['/mnt'], tty=True, stdin_open=True) c.start(container['Id'], binds={'/data':'/mnt'})
这里就创建了一个挂载了
/data目录的container.
4. 通过环境变量传递文件
这个是我自己发明的小技巧, 因为在利用volumes参数的时候, 发现docker有些不稳定. 经常无法删除. 所以就通过创建的时候通过环境变量传输文件.
先将文件通过
base64编码, 然后通过
create_container方法的
environment参数传递变量到container中, 在container中再解码放入到合适的路径下即可.
5. 总结
总的来说, 有三种不同的方式, 将host中的文件传递到container.分别是:
创建Image时, 添加文件到Image
创建Container时, 通过volumes参数传递文件
创建Container时, 通过environment参数传递文件
相关文章推荐
- copy file to docker from realhost
- VBA code from template is linked to doc file. I need a copy
- Unable to copy file "Resources.cs" to "C:\Debug\Resources.cs". Access to the path 'C:\Debug\Resources.cs' is denied.
- RMAN-06023 : no backup or copy of datafile found to restore 说明
- 转:RMAN-06023 : no backup or copy of datafile found to restore 说明
- copy the content of a file to another file.
- Copy Screen Object to Bitmap File
- Error “Unable to copy the file xxx from the project template to the project. Can't find the file \xxxx” when create VS template
- Unable to find a 'userdata.img' file for ABI armeabi to copy into the AVD folder
- XRDP:Unable to copy the users Xauthorization file.
- unable to find a 'userdata.img' file for ABI armeabi to copy into the AVD folder
- 利用FileChannel复制文件 Copy one File to Another【三种方法】
- Unable to copy file to bin 对路径 的访问被拒绝
- Bug on Build Solution: "Unable to copy file... because it is being used by another process.."
- Android问题集锦之九:Unable to find a 'userdata.img' file for ABI armeabi to copy into the AVD folder.
- RMAN-06024: no backup or copy of the control file found to restore
- failed to copy 'libsimplejni.so' to '/system/lib/libsimplejni.so': Read-only file system
- How to copy a datafile from ASM to a file system not using RMAN
- android copy raw file to sdcard
- cannot write file to virtual machine aborting the file copy operation.