docker映象體積優化方法與實踐

2021-09-24 06:58:12 字數 1924 閱讀 8452

在私有化專案中,我司現場實施基本上是使用docker部署。而過大的映象體積會影響實施部署效率(xinqing),所以作為開發要想與實施和諧相處(bubeipeng),可以優化一下映象體積。

1.減少dockerfile中的指令。如有多個run指令,可以用&&符號連線。 使用

run apt-get update && apt-get install gettext

複製**

而不是

run apt-get update

run apt-get install gettext

複製**

2.使用多階段構建

from node:8.9.4 as build

add ./im-manage ./data/dev/im-manage/

add ./entrypoint.d ./data/dev/im-manage/entrypoint.d

run npm install

from node:8.9.4-alpine

run apk add --no-cache gettext

workdir /data/dev/im-manage

copy --from=build /data/dev/im-manage .

複製**

3.使用alpine版本的基礎映象 比如node:8.9.4-alpine目前 docker 官方已開始推薦使用 alpine 替代之前的 ubuntu 做為基礎映象環境。相比於其他 docker 映象,它的容量非常小,僅僅只有5mb左右。注意alpine自帶的包管理工具是apk。

docker映象製作是一層一層構建的,一條語句就會建立乙個新層。而層數是會占用體積的,顯而易見層數越多,體積越大。所以第一種方法減少語句即會減小映象體積。 在第二種方法的示例中,docker多階段構建將構建過程分為兩個階段。對於第二個階段來說

from node:8.9.4 as build

add ./im-manage ./data/dev/im-manage/

add ./entrypoint.d ./data/dev/im-manage/entrypoint.d

run npm install

複製**

這四層會被壓縮成一層。然後在下一階段通過copy --form=build引入,所以最終是四層。這有點類似git當中,將多個提交點合併為乙個提交點。

優化之前的dockerfile

from node:8.9.4

workdir /data/dev/im-manage

run apt-get update

run apt-get gettext

add ./im-manage ./

add ./entrypoint.d ./entrypoint.d

run npm install

複製**

優化之後的dockerfile

from node:8.9.4 as build

add ./im-manage ./data/dev/im-manage/

add ./entrypoint.d ./data/dev/im-manage/entrypoint.d

run npm install

from node:8.9.4-alpine

run apk add --no-cache gettext

workdir /data/dev/im-manage

copy --from=build /data/dev/im-manage .

複製**

體積從1g多減小到了350+;少了將近1個g。

如有不足之處歡迎指出

Docker映象的優化

1 清理不必要的中間產物 2 減少run命令的使用 3 使用多階段構建映象 4 選擇精簡的base映象 優化映象其實就是在能保證映象想要的作用的前提下,盡量減小映象的大小,節省資源。優化映象有幾種途徑 注意 必須是在保證映象作用的前提下進行優化 下面通過實際操作來展示映象是如何被優化的,這裡我假設想...

Docker映象壓縮和優化

在構建docker容器時,應該盡量想辦法獲得體積更小的映象,因為傳輸和部署體積較小的映象速度更快。但run語句總是會建立乙個新層,而且在生成映象之前還需要使用很多中間檔案,在這種情況下,該如何獲得體積更小的映象呢?示例 dockerfile from ubuntu 14.04 add run.sh ...

docker映象與docker容器

映象與容器的關係 映象 例如系統安裝映象 已經裝好環境的虛擬機器 執行一次 就是乙個容器 新的作業系統 當作是容器的 源 如同物件導向中的類 容器 裝好的系統 乙個乙個的作業系統,或者是已經裝好東西的系統 如同物件導向的物件 docker search 包名 搜尋包 一般都是去hub.docker....