一千萬個為什麽

搜索

如何每次創建最小的工作碼頭圖像?



Aim: to create the smallest working docker images every time

當前</強>

REPOSITORY          TAG       IMAGE ID            CREATED             SIZE
a-docker-image      latest    x                   42 minutes ago       1.92 GB

嘗試</強>

在Dockerfile的末尾添加一個清理步驟:

#clean
RUN apt-get purge -y wget
RUN rm -r a-build-dir
RUN apt-get purge -y a-package

稍微縮小圖像大小:

REPOSITORY          TAG       IMAGE ID            CREATED             SIZE
a-docker-image      latest    y                   2 minutes ago       1.86 GB

討論</強>

我已經構建了各種碼頭圖像。每次我嘗試減小創建的圖像的大小,但我總是覺得它太大了。我正在尋找一個已經由github上的某個人創建的腳本,它從圖像中刪除所有多余的軟件包,所以創建的圖像的大小將盡可能小。

正如我所說,我總是試圖減小圖像的大小,但我想要應用這種一致性,以便從現在開始創建的每個圖像都盡可能小。

問題</強>

如何每次創建最小的工作碼頭圖像?

轉載註明原文: 如何每次創建最小的工作碼頭圖像?

一共有 2 個回答:

一個 Dockerfile 為文件中的每個命令創建一個新層。由於圖層很好,層疊,所以不能刪除上一層添加的文件。這就是為什麽當你安裝軟件包,下載文件,或者在單獨的命令中創建構建版本時 - 即使在未來的圖層中,它們仍然存在於圖像中。

所以如果你只是改變這個:

RUN apt-get update -y
RUN apt-get install -y wget a-package
# ...
RUN apt-get purge -y wget
RUN rm -r a-build-dir
RUN apt-get purge -y a-package

為此:

RUN apt-get update -y \
    && apt-get install -y wget a-package \
    && mkdir a-build-dir \
    && wget http://some-site/very-big-source-code.tar.gz \
    && tar xzvf very-big-source-code.tar.gz \
    && do-some-compilation \
    && apt-get purge -y wget \
    && cd .. \
    && rm -rf a-build-dir \
    && apt-get purge -y a-package

你會得到一個更小的圖像。


Another option, is to squash the image after you built it. Q: How does the new docker --squash work?


另一個選擇是選擇一個纖細的基礎圖像。例如,使用 Alpine Linux 作為其基礎而不是Debian的圖像僅需10-15mb而不是180-250mb。這是在添加您自己的應用程序和數據之前。 Docker Hub 上的許多官方基本映像都有一個阿爾卑斯山版本。

可能不完全是答案,但值得給出替代方案。

考慮到這一點,已經創建了廚師的 habitat ,並創建了一個包含所有需要的依賴項的包沒有你不希望的無關的發行版/基礎圖像加載。

在這裏提取重要信息,從 此博客文章 與一個簡單的nodejs應用程序:

  michael @ ricardo-2:plans_pkg_part_2 $ docker圖片
儲存標簽圖像ID創建的大小
mfdii/node-example最新36c6568c606b 40分鐘前655.9 MB
節點最新04c0ca2a8dad 16小時前654.6 MB
mfdii/mytutorialapp最新534afd80d74d 2分鐘前182.1 MB
</代碼> 

mdfii/node-example is a docker image from a classic dockerfile while mfdii/mytutorialapp is the docker image produced with habitat.

如果規模是您主要關心的問題,並且您將采取人居計劃的學習曲線,這可能是您的一個解決方案。