R 应用程序的多阶段构建

fal*_*rto 5 linux r docker docker-multi-stage-build

我正在尝试为基于图像的 R 应用程序创建多阶段构建rocker/r-ubuntu:20.04

我基于该映像的原因是按照apt-get建议安装二进制包,以缩短构建时间。

如果我在没有多阶段构建的情况下构建图像,则最终图像大小为2.32GB,因此我需要通过多阶段构建来减小最终大小。

我遵循的方法是创建一个alpine:latest映像并从构建器复制app文件夹、安装的 R 库(/usr/local/lib/R/site-library/以及位于/usr/share/doc.

最终图像不起作用,因为没有安装执行应用程序的命令。

Dockerfile 如下:

FROM rocker/r-ubuntu:20.04 as builder


# # system libraries of general use
RUN apt-get update && apt-get install -y \
    pandoc \
    ...
    libxml2-dev 

RUN apt-get update && \
    apt-get install -y -qq \
    r-cran-config \
    ...
    r-cran-tidyverse 

RUN R -e "install.packages(c('other-packages'), dependencies=T)"    


# copy the app to the image
RUN mkdir -p /root/bloomapp/tmp
COPY . /root/bloomapp
COPY .Renviron Rprofile.site /usr/lib/R/etc/


FROM alpine:latest

#Copy app to alpine
COPY --from=builder /root/bloomapp /root/bloomapp
COPY --from=builder /usr/local/lib/R/site-library/ /usr/local/lib/R/site-library/
COPY --from=builder /usr/share/doc /usr/share/doc

WORKDIR /root/bloomapp/

EXPOSE 3838
Run Code Online (Sandbox Code Playgroud)

这种做法合理吗?或者是否存在其他更好的方法来对 R 应用程序映像进行多阶段构建?

谢谢。

小智 0

除了从摇杆构建开始之外,还可以使用精简映像并在builder多阶段构建阶段从源代码安装 R。

请参阅此处的 R 安装文档以供参考:https://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-R-under-Unix_002dalikes

  • 选择一个目录来安装R 树(R 不仅仅是一个二进制文件,还有其他数据集、帮助文件、字体规格等)。我们就称呼这个地方吧R_HOME。解压源代码。这应该在顶级目录下创建目录 src、doc 以及其他几个目录...如果成功执行 configure 和 make 命令,将创建一个名为 R 的 shell 脚本前端并将其复制到R_HOME/bin.