- 前言
- 建立 Docker image 時遇到的瓶頸
- Step 1:優化安裝套件的速度
- 改用 Precompiled 版本的套件 -> 安裝速度提升 8.6 倍
- Step 2:優化 Docker image size
- 用 r-ver 取代 tidyverse -> 節省 image size 約 2.8 倍
- 使用 Multi-stage Builds:兩階段相同 image -> 沒有太大改變
- 使用 Multi-stage builds:第二階段改 ubuntu -> 成功縮減 2 倍 image size
- 總結
- 後記
前言
近期遇到有部分 R Script 執行時佔用太多 VM 記憶體,所以打算把 R 打包成一個 Docker image,讓他可以在 GCP Cloud Run 上面跑,解放 VM 的資源。
首先我建立了一個基於 tidyverse 的 Dockerfile,安裝常用的兩個套件,並讓這個 image 可以由外部提供一個 JOB_NAME 參數,來動態指定要執行的檔案。
(選擇 tidyverse 的原因是使用 r-base 時會遇到無法安裝 bigrquery 的問題)
FROM rocker/tidyverse:4.4.1
RUN R -e "install.packages(c('dplyr', 'bigrquery'), repos='<http://cran.rstudio.com/>')"
COPY r_jobs /r_jobs
CMD ["sh", "-c", "Rscript /r_jobs/$JOB_NAME"]
建立 Docker image 時遇到的瓶頸
雖然這個 image 是可以正常執行,但 docker build 後發現兩個大問題:
- Docker image 太胖!
- image 竟然有 2.5 GB 這麼大,這將會造成部署與存放上的問題。
- R 套件安裝太慢!
- 光是安裝兩個套件的步驟,就要花 5 分鐘,安裝 12 個套件需要 20 分鐘(如下圖 1,203 秒),時間成本太高。
基於這兩個問題我開始研究 Docker image 的優化方法。
閱讀更多»