2015-03-25 34 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