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.