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.

分别是:

  1. 创建Image时, 添加文件到Image
  2. 创建Container时, 通过volumes参数传递文件
  3. 创建Container时, 通过environment参数传递文件

copy file to docker、的更多相关文章

  1. copy file to docker from realhost

    http://blog.e3rp4y.me/blog/2014/05/23/copy-file-from-host-to-docker.html --------------------------- ...

  2. 使用Docker、CoreOS、Mesos部署可扩展的Web应用

    [编者的话]本文作者重点介绍了如何使用Docker.CoreOS.Mesos.Vulcand.对象存储来部署一个可扩展的Web应用,他首先介绍了为什么要选择这些工具以及与其它工具相比这些工具的优势.紧 ...

  3. 【转】OpenStack和Docker、ServerLess能不能决定云计算胜负吗?

    还记得在十多年前,SaaS鼻祖SalesForce喊出的口号『No Software』吗?SalesForce在这个口号声中开创了SaaS行业,并成为当今市值460亿美元的SaaS之王.今天谈谈『No ...

  4. Fbric、Ansible、Docker、Chaos Monkey:DevOps工具的年中回顾

    Fbric.Ansible.Docker.Chaos Monkey:DevOps工具的年中回顾 [编者按]近日,Cyber Engineering Solutions Group 技术经理 Hasan ...

  5. 解决编译报错:Unable to copy file, because it is being used by another process.

    Error    63    Unable to copy file "D:\DEV\XXX Website\trunk\4 Source Code\Common\WebControls\b ...

  6. docker、oci、runc以及kubernetes梳理

    容器无疑是近年来云计算中最火热的关键词.随着docker的大热,docker.oci.runc.containerd等等名词也逐渐传播开来.这么多的名词,也容易让人混淆.本文对相关名词和其之间的联系进 ...

  7. 【Docker】(3)---linux部署Docker、Docker常用命令

    linux部署Docker.Docker常用命令 本次部署Linux版本:CentOS 7.4 64位. 说明: 因为Docker是基于Linux 64bit的 所以Docker要求64位的系统且内核 ...

  8. ubuntu16.04安装最新版docker、docker-compose、docker-machine

    安装前说明: 本文将介绍在ubuntu16.04系统下安装和升级docker.docker-compose.docker-machine. docker:有两个版本:docker-ce(社区版)和do ...

  9. Docker、kubernetes、微服务、SpringBoot/Cloud...好乱!到底要不要学?

    Docker.微服务日益火热的今天,相信标题上这些名词大家都不陌生.但也相信有很多同学并不够清楚他们的概念,不理解它们的关系,也可能有这样的疑惑:不知道跟我有没有关系?要不要学习?怎么去学习?学哪些东 ...

随机推荐

  1. 3801. String LD

    Description Stringld (left delete) is a function that gets a string and deletes its leftmost charact ...

  2. [Cocos2D-x For WP8]Label标签

    Label标签主要会用于在游戏中显示一些文字字符串类型的信息.那么在Cocos2D-x里面主要会有下面的一些创建标签的方式: 1.使用CCLabelTTF类生成系统文字的标签,编程语法如下: CCLa ...

  3. 【wikioi】1040 统计单词个数

    题目链接 算法:划分型DP PS:被卡过3天.日期:2013-10-10 ~ 2013-10-12 18:52:48 这题是我提交了13次AC= =汗= = 题目描述: 给出一个长度不超过200的由小 ...

  4. Codeforces Round #200 (Div. 2) E. Read Time(二分)

    题目链接 这题,关键不是二分,而是如果在t的时间内,将n个头,刷完这m个磁盘. 看了一下题解,完全不知怎么弄.用一个指针从pre,枚举m,讨论一下.只需考虑,每一个磁盘是从右边的头,刷过来的(左边来的 ...

  5. bg,fg,ctrl+z组合

    使用ctrl + Z 把一个进程挂起 [root@limt ~]# sh Testlsof.sh >111.log ^Z [1]+ Stopped sh Testlsof.sh > 111 ...

  6. Linq to Entities下存储过程的使用方法

    1.首先在数据库中创建好存储过程. 2.在实体模型中添加存储过程的映射.此时根据映射过来的查询结果有两种途径:第一种可以选择添加选择的存储过程的函数到实体模型中.这样的话,查询的结果将会是xxx_re ...

  7. java mail(发送邮件--163邮箱)

    package com.util.mail; /** * 发送邮件需要使用的基本信息 */ import java.util.Properties; public class MailSenderIn ...

  8. iOS开发中几个重要的方法

    iOS开发中几个重要的方法: 加载类到内存,程序刚启动的时候调用,调用在main函数之前 1.+(void)load{ } 初始化类,类第一次使用的时候调用一次 2.+(void)initialize ...

  9. 行业集中度(Concentration Ratio)

    行业集中度是决定市场结构最基本.最重要的因素,集中体现了市场的竞争和垄断程度,经常使用的集中度计量指标有:行业集中率(CRn指数).赫尔芬达尔—赫希曼指数(Herfindahl-HirschmanIn ...

  10. HTML5 表单属性

    form 属性 form 属性规定输入域所属的一个或多个表单. 注释:form 属性适用于所有 <input> 标签的类型. form 属性必须引用所属表单的 id: 实例 <for ...