Docker Emscripten“;“传入”;安装异常大

Docker Emscripten“;“传入”;安装异常大,docker,ubuntu-14.04,emscripten,Docker,Ubuntu 14.04,Emscripten,我使用emsdk在Ubuntu14.04 Docker容器上安装了Emscripten: emsdk install emscripten-incoming emsdk install clang-incoming-64bit 安装成功完成,一切正常,不过我后来注意到Docker映像占用了我大约12GB的硬盘空间。 当我使用Emscripten的主分支时,它的重量只有2GB左右。 这导致我在将图像上载到服务器时出现问题。 对于安装的大尺寸,我能做些什么吗? 编辑: 这是我使用的Dockerf

我使用emsdk在Ubuntu14.04 Docker容器上安装了Emscripten:

emsdk install emscripten-incoming
emsdk install clang-incoming-64bit
安装成功完成,一切正常,不过我后来注意到Docker映像占用了我大约12GB的硬盘空间。
当我使用Emscripten的主分支时,它的重量只有2GB左右。
这导致我在将图像上载到服务器时出现问题。
对于安装的大尺寸,我能做些什么吗?

编辑:
这是我使用的Dockerfile:

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
编辑:
以下是使用Emscripten主分支的上一个Dockerfile。
唯一的区别是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

在通常情况下减小图像大小方面,您可以做很多事情:

  • 考虑使用debian映像而不是ubuntu映像,ubuntu映像应该适合您的目的,而且要小得多
  • 不要执行
    运行apt-get-upgrade-y
    。而是通过拉取基础映像的新版本并在需要时重建来更新映像
  • 将所有的
    apt get install
    内容放在同一行,然后使用
    rm-rf/var/lib/apt/lists/
    删除不需要的文件,例如:

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

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

但是,我无法帮助您缩小emscripten的大小。

您是在测量图像的大小,还是图像和每个中间容器的大小?我正在测量图像的虚拟大小,如“docker images”所示。我用完全相同的方法测量了Emscripten的主分支,它只有2GB。如果不进行测试,从内存中,
Emscripten incoming
包含完整的git日志和.git文件夹。这可能解释了相对较大的大小。您是如何使用
docker提交
或docker文件和
docker build-t mytag来构建映像的。
?@bnieland是和否。我刚刚停止使用传入分支。为什么升级映像不是一个好主意?我的理由是我希望安装所有新的软件包和安全补丁。我分离了apt get安装行,这样,如果我将来更改其中一行,docker将能够使用缓存,而不必重新安装所有软件包。我没有注意到我同时安装了python2.7和python,但是python包似乎依赖于python2.7,所以它没有安装两个版本的python。我将尝试按照您的建议缩小图像的大小,但从我的测试来看,Emscripten分支似乎是主要的问题,只是正确的方法是拉一个新版本的ubuntu图像,它应该是最新的。如果不是,就抱怨。如果你需要一个特殊的包裹,你自己去拿。否则,你会大大降低Docker的构建速度,可能会安装很多你不需要的东西。我拿出了不要因为它有点强:)。您可能希望参考python映像以了解如何安装python(它们只是从源IIRC进行安装)。