2014-08-30 96 views
6

我有一个〜300Mb的压缩本地文件,我添加到码头图像。下一个状态然后提取图像。Docker如何在没有提交文件的情况下添加文件?

问题是,ADD语句导致提交导致新的文件系统层使图像大于它所需要的300Mb。

ADD /files/apache-stratos.zip /opt/apache-stratos.zip 
RUN unzip -q apache-stratos.zip && \ 
    rm apache-stratos.zip && \ 
    mv apache-stratos-* apache-stratos 

问题:是否有变通方法来添加本地文件,而不会造成提交?

一个选项是运行一个简单的Web服务器(例如python -m SimpleHTTPServer)启动泊坞窗构建,然后用wget检索文件,但似乎有点混乱之前:

RUN wget http://localhost:8000/apache-stratos.zip && \ 
    unzip -q apache-stratos.zip && \ 
    rm apache-stratos.zip && \ 
    mv apache-stratos-* apache-stratos 

另一种选择是在容器启动而不是构建时提取压缩文件,但我宁愿尽可能快地保持启动。

回答

13

根据the documentation,如果您从本地文件系统(不是URL)将档案文件传递到Dockerfile中的ADD(带有目标路径,而不是路径+文件名),它会将该文件解压缩到给定的目录中。

如果<来源>是识别的压缩格式 本地tar归档文件(身份,gzip的,bzip2的或XZ)然后将其解压缩为一个目录。 来自远程URL的资源未被解压缩。当目录被 复制或解包,它具有相同的行为焦油-x:结果是 的联合:

1)无论在目标路径存在,2) 源树的内容,冲突解决了“2”。在逐个文件的基础上。

尝试:

ADD /files/apache-stratos.zip /opt/ 

,看文件是否存在,而无需进一步压缩。

+8

似乎并不解压'在泊坞1.2.0 .zip'文件。 – 2014-09-02 02:56:22

+0

“如果[SRC]是识别的压缩格式的本地tar归档文件(身份,gzip的,bzip2的或XZ)然后将其解压缩为一个目录”。 – 2014-09-02 10:34:23

+0

缺少'.zip'文件支持添加的事实似乎是一个预期的决定:https://github.com/docker/docker/issues/15036 – jap1968 2017-01-17 08:30:17

2

您可以使用docker-squash壁球新建图层。这应该显着降低图像尺寸。

不幸的是,提到的解决方法(RUN curl ... && unzip ... & rm ...,解压集装箱开始)是在时刻(泊坞窗1.11)是唯一的选择。

相关问题