将docker buildkit缓存与R包一起使用

将docker buildkit缓存与R包一起使用,r,docker,docker-buildkit,R,Docker,Docker Buildkit,我尝试使用docker buildkit方法来缓存包,以加快向docker容器添加包的速度。我是从和中学到的。对于Python和apt-get,我可以让它工作,但是对于R包,我不能让它工作 在Python的Dockerfile中,我可以更改: RUN pip install -r requirements.txt to(需要Dockerfile顶部的注释位) 然后,当我向requirements.txt文件中添加一个包,而不是重新下载和构建包时,pip能够重新使用它所做的所有工作。因此buil

我尝试使用docker buildkit方法来缓存包,以加快向docker容器添加包的速度。我是从和中学到的。对于Python和apt-get,我可以让它工作,但是对于R包,我不能让它工作

在Python的Dockerfile中,我可以更改:

RUN pip install -r requirements.txt
to(需要Dockerfile顶部的注释位)

然后,当我向
requirements.txt
文件中添加一个包,而不是重新下载和构建包时,pip能够重新使用它所做的所有工作。因此buildkit缓存挂载在docker的图像层之外添加了一个级别的缓存。这节省了大量的时间。我希望为r-packages设置类似的功能

以下是我尝试过的对apt-get有效但对r-packges无效的方法。我还尝试了
install2.r
脚本

# syntax=docker/dockerfile:experimental
FROM rocker/tidyverse
RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache
RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \
  apt update && apt install -y gcc \
      zsh \
      vim

COPY ./requirements.R .
RUN --mount=type=cache,target=/usr/local/lib/R/site-library Rscript ./requirements.R
我想我不明白:

  • buildkit的工作原理。它能在容器内建造容器吗?ie缓存路径在“生成容器”上
  • 需要指定什么作为R的目标,才能注意到它已经下载(并可能构建)了

  • 我怀疑它与安装R软件包时的
    keep.source
    命令有关,因为仍在思考这个问题。但是看起来renv在这里是相关的,因为它提供了一个缓存,但是它似乎想在容器运行时而不是构建时链接,假设缓存在主机上而不是buildx building container hi@jameshowison上,您找到了如何做吗?我对此一无所知,我想知道是否有一个可行的解决方案,可以通过使用某种类型的r软件包安装缓存来节省时间。这就是我所得到的:我认为binder的人也在为此而努力。谢谢分享!
    # syntax=docker/dockerfile:experimental
    FROM rocker/tidyverse
    RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache
    RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \
      apt update && apt install -y gcc \
          zsh \
          vim
    
    COPY ./requirements.R .
    RUN --mount=type=cache,target=/usr/local/lib/R/site-library Rscript ./requirements.R