2015-03-25 31 views
1

我使用emsdk为使安装Emscripten一个Ubuntu 14.04泊坞容器需要大约12 GB的硬盘。
当我使用Emscripten的主分支时,它的重量只有2GB左右。
这会导致我在将图像上传到服务器时出现问题。
有什么我可以做的关于安装的大尺寸?

编辑:
这里是我使用的Dockerfile:
Emscripten“进入”安装特别大

FROM ubuntu:14.04 

ENV DEBIAN_FRONTEND noninteractive 

RUN apt-get update 
RUN apt-get upgrade -y 

RUN apt-get install -y cmake 
RUN apt-get install -y ninja-build 
RUN apt-get install -y python2.7 
RUN apt-get install -y default-jre 
RUN apt-get install -y git 
RUN apt-get install -y python 
RUN apt-get install -y g++ 
RUN apt-get install -y nodejs 
RUN apt-get install -y nodejs-legacy 

# Download emsdk 
RUN apt-get install -y curl 
RUN cd /tmp && curl 'https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz' | tar xvz 

# Install emsdk 
RUN /tmp/emsdk_portable/emsdk update 
RUN /tmp/emsdk_portable/emsdk install emscripten-incoming 
RUN /tmp/emsdk_portable/emsdk install clang-incoming-64bit 
RUN /tmp/emsdk_portable/emsdk activate emscripten-incoming 

ENV PATH /tmp/emsdk_portable:$PATH 
ENV PATH /tmp/emsdk_portable/clang/fastcomp/build_master_64/bin:$PATH 
ENV PATH /tmp/emsdk_portable/emscripten/incoming:$PATH 

ENV EMSCRIPTEN /tmp/emsdk_portable/emscripten/incoming 

RUN apt-get install -y python-yaml 

编辑:
这里是前一Dockerfile使用Emscripten的主分支。
唯一的区别是Emscripten分支(并且我将安装移到了/ usr/local/emscripten)。
我刚建立了这个图像,它的重量约2GB。

FROM ubuntu:14.04 

ENV DEBIAN_FRONTEND noninteractive 

RUN apt-get update 
RUN apt-get upgrade -y 

RUN apt-get install -y cmake 
RUN apt-get install -y ninja-build 
RUN apt-get install -y python2.7 
RUN apt-get install -y default-jre 
RUN apt-get install -y git 
RUN apt-get install -y python 
RUN apt-get install -y g++ 
RUN apt-get install -y nodejs 
RUN apt-get install -y nodejs-legacy 

# Download emsdk 
RUN apt-get install -y curl 
RUN mkdir -p /usr/local/emscripten 
RUN cd /usr/local/emscripten && curl 'https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz' | tar xvz 

# Install emsdk 
RUN /usr/local/emscripten/emsdk_portable/emsdk update 
RUN /usr/local/emscripten/emsdk_portable/emsdk install emscripten-master 
RUN /usr/local/emscripten/emsdk_portable/emsdk install clang-master-64bit 
RUN /usr/local/emscripten/emsdk_portable/emsdk activate emscripten-master 

ENV PATH /usr/local/emscripten/emsdk_portable:$PATH 
ENV PATH /usr/local/emscripten/emsdk_portable/clang/fastcomp/build_master_64/bin:$PATH 
ENV PATH /usr/local/emscripten/emsdk_portable/emscripten/master:$PATH 

ENV EMSCRIPTEN /usr/local/emscripten/emsdk_portable/emscripten/master 

RUN apt-get install -y python-yaml 
+0

您是在测量图像的大小,还是图像和每个中间容器? – 2015-03-25 12:39:02

+0

我正在测量图像的虚拟大小,如“码头图像”所示。我测量了Emscripten的主分支,完全相同,只有2​​GB。 – 2015-03-25 12:44:14

+1

未经测试,从内存中,“emscripten-incoming”包含完整的git日志和.git文件夹。这可以解释相对较大的尺寸。 – 2015-03-25 12:49:44

回答

2

在总体上降低了图像尺寸方面,还有很多,你可以这样做:

  • 考虑使用Debian的图像,而不是一个Ubuntu的一个,这应该符合您的需求,是小得多。
  • 不要做RUN apt-get upgrade -y。相反,通过拉动基础镜像的新版本并在需要时进行重建来更新图像。
  • 把你所有的东西apt-get install在同一行,并与rm -rf /var/lib/apt/lists/ e.g事后删除不需要的文件:

    RUN apt-get update \ 
        && apt-get install -y cmake \ 
            ninja-build \ 
        ... 
        && rm -rf /var/lib/apt/lists/* 
    
  • 摆脱所有不必要的依赖或使用更小的版本;你真的需要完整的g ++和python的两个版本吗?

  • 看看你是否可以在一个容器中构建emscripten,然后将二进制文件复制到一个新容器中。这样你可以消除构建依赖关系。或者,您可以安装构建依赖关系,构建emscripten并在同一个RUN指令中删除所有依赖项。这有点乱,但我注意到this emscripten Dockerfile做到了。

我不禁要特别减小emscripten的大小。

+0

为什么升级图像不是一个好主意?我的理由是我想要安装所有新软件包和安全修复程序。 我将apt-get安装行分开,以便将来如果更改其中一个,docker将能够使用缓存,并且不必重新安装所有软件包。 我没有注意到我正在安装python2.7和python,但似乎python包依赖于python2.7,所以它没有安装两个版本的Python。 我会尽量按照你的建议来减小图像的大小,但是从我的测试看来,Emscripten分支似乎是主要问题 – 2015-03-25 15:42:23

+0

这只是正确的方法是拉取新版本的ubuntu镜像,这应该是最新的。如果不是,抱怨。如果你需要一个特定的包装,请自己拉。否则,你会大大减缓Docker的构建,可能会安装很多你不需要的东西。我拿出来不要因为它有点强大:)。您可能想要参考python图像来了解如何安装python(它们只是从源码IIRC中完成)。 – 2015-03-26 09:18:35