在私有化專案中,我司現場實施基本上是使用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....