r - 使用带有 R 包的 docker buildkit 缓存
问题描述
我正在尝试使用 docker buildkit 方法来缓存包以加快将包添加到 docker 容器中。我从python 和 apt-get 包的说明以及关于在构建 Docker 时缓存 python 包的有用 Stackexchange 答案中了解了它。对于 Python 和 apt-get 我可以让它工作,但我不能让它为 R 包工作。
在 Python 的 Dockerfile 中,我可以更改:
RUN pip install -r requirements.txt
to (并且需要 Dockerfile 顶部的注释)
# syntax=docker/dockerfile:experimental
RUN --mount=type=cache,target=/root/.cache/pip pip install -r requirements.txt
然后,当我将包添加到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 的工作原理。它是否在容器内构建容器?即缓存路径在“构建容器”上?
- 需要指定什么作为 R 的目标,以注意到它已经下载(并且可能已构建)。
我怀疑它与keep.source
安装 R 包时的命令有关,如本问题所述
解决方案
推荐阅读
- java - 从另一个类导入 int 变量会使应用程序崩溃
- c# - 使用 Automapper 映射嵌套集合
- c# - 如何继续从我的 Socket 读取数据以附加我的缓冲区
- python - 为什么python的del()会被特殊处理?
- ios - Swiftui 按钮切换
- spring - 为什么 Spring 与 Mongo 反应使用这么多连接
- feathersjs - 如何在羽毛中间件中添加用户身份验证?
- python - Google OR-tools 员工调度中的最大轮班长度系列
- python - 如何删除 \xa0 和 nan?
- .net - 从 Visual Studio 部署到特定 AWS ec2 实例