使用带有R-packages的docker buildkit缓存

时间:2019-12-09 16:58:12

标签: r docker docker-buildkit

我正在尝试使用docker buildkit方法来缓存软件包,以加快将软件包添加到docker容器的速度。我从the instructions for both python and apt-get packagesuseful Stackexchange answer on caching python packages while building Docker了解到了这一点。对于Python和apt-get,我可以使它工作,但对于R软件包,我不能使它工作。

在适用于Python的Dockerfile中,我可以进行更改:

RUN pip install -r requirements.txt

到(并且需要在Dockerfile顶部的注释位)

# syntax=docker/dockerfile:experimental
RUN --mount=type=cache,target=/root/.cache/pip pip install -r requirements.txt

然后,当我将软件包添加到requirements.txt文件中时,pip可以重新使用已完成的所有工作,而无需重新下载并构建软件包。因此,buildkit缓存安装会在docker的图像层之外增加一层缓存。这是一个巨大的节省时间。我希望为r-package设置类似的内容。

这是我尝试过的适用于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

我不明白:

  1. buildkit如何工作。它会在容器内部建立容器吗?即缓存路径在“构建容器”上?
  2. 需要指定什么作为R的目标,以注意它已经下载(并可能已构建)。

我怀疑在安装R软件包(例如discussed in this question)时,它与keep.source命令有关

0 个答案:

没有答案
相关问题