我正在尝试使用docker buildkit方法来缓存软件包,以加快将软件包添加到docker容器的速度。我从the instructions for both python and apt-get packages和useful 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
我不明白:
我怀疑在安装R软件包(例如discussed in this question)时,它与keep.source
命令有关