gpt4 book ai didi

r - 使用R/python依赖项优化Docker

转载 作者:行者123 更新时间:2023-12-02 21:11:04 26 4
gpt4 key购买 nike

我最初将问题发布在Docker论坛上,但尚未收到任何评论,因此,鉴于SO的访问量越来越大,请将其发布在这里。

https://forums.docker.com/t/using-multi-stage-docker-build-for-slimming-down-images-with-r-dependency/67967

我想用一句话来简化我的R / python docker ,欢迎提出任何建议!谢谢!

因此,我正在为某些具有R依赖关系的应用程序构建docker镜像,但是我编写的幼稚构建过程(请参见下面的Dockerfile,第1阶段)会导致IMO镜像大小膨胀。

因此,我正在考虑使用多阶段构建,以了解缩小图像尺寸的效果如何。

显然,仅复制R&Rscript二进制文件和来自构建层的软件包将不起作用,因为我确实收到了以下错误消息,表明我还需要复制这些动态库依赖项。

/usr/lib/R/bin/R: line 238: /usr/lib/R/etc/ldpaths: No such file or directory
/usr/lib/R/bin/exec/R: error while loading shared libraries: libR.so: cannot open shared object file: No such file or directory

所以我的问题是
  • 是我的方法从根本上存在缺陷(或者在节省空间/维护方面不值得一提),或者说
  • 我是否只需要复制更多库?

  • 还有一个与远程相关的问题:Python依赖项是否也会有类似情况?

    谢谢!

    与R的插图
    ####### stage 1: build
    FROM ubuntu:18.10 as builder

    # update OS libs
    ARG OS_LIBS="software-properties-common libcurl4-openssl-dev libssl-dev libxml2-dev gpg-agent gnupg"
    ARG DEBIAN_FRONTEND=noninteractive
    RUN apt-get -qqy update --fix-missing && \
    apt-get -qqy full-upgrade && \
    apt-get -qqy install --no-install-recommends \
    ${OS_LIBS} && \
    apt-get autoremove --purge -y && apt-get autoclean -y && \
    rm -rf /var/cache/apt/* /var/lib/apt/lists/* /var/tmp/* /tmp/* /usr/share/man/?? /usr/share/man/??_*

    # install base R
    ARG R_RELEASE_VERSION="3.5.1"
    RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9 && \
    add-apt-repository "deb http://cran.rstudio.com/bin/linux/ubuntu cosmic-cran35/" && \
    apt-get -qqy update --fix-missing && \
    apt-get -qqy full-upgrade && \
    apt-get -qqy install --no-install-recommends \
    r-base-core="${R_RELEASE_VERSION}"-1build1 \
    r-base-dev="${R_RELEASE_VERSION}"-1build1
    # this is just a toy example
    RUN R -e -vanilla 'install.packages("data.table", destdir = "/tmp/R_pkg_download/", clean = TRUE)'



    ####### stage 2: copy the binary and libs
    FROM ubuntu:18.10

    RUN mkdir -p /usr/lib/R \
    /usr/local/lib/R/site-library
    COPY --from=builder /usr/bin/R /usr/bin/R
    COPY --from=builder /usr/bin/Rscript /usr/bin/Rscript
    COPY --from=builder /usr/lib/R /usr/lib/R
    COPY --from=builder /usr/local/lib/R/site-library /usr/local/lib/R/site-library

    最佳答案

    是的,您还需要复制共享库(例如提到的libR.so),因为动态链接的R二进制文件需要它们。

    但是,除非您有特定的用例,否则这种图像大小优化是不值得的。节省的磁盘空间的价格可能比时间值(value)低得多,您将花费时间进行优化。在您的情况下,我将使用rocker(rocker/r-ver)中的一些就绪R图像-证明R图像可用于一般R。

    关于r - 使用R/python依赖项优化Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54543287/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com