Использование кеширования docker buildkit с R-пакетами

Я пытаюсь использовать подход docker buildkit для кеширования пакетов, чтобы ускорить добавление пакетов в контейнеры докеров. Я узнал об этом из инструкций для пакетов python и apt-get и из полезного ответа Stackexchange по кешированию пакетов python при сборке Docker. Для Python и apt-get я могу заставить это работать, но не могу заставить его работать для пакетов R.

В Dockerfile для Python я могу изменить:

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 добавляет уровень кеширования за пределы слоев изображений в докере. Это огромная экономия времени. Я надеюсь настроить что-то подобное для r-пакетов.

Вот то, что я пробовал, работает для 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, чтобы заметить, что он уже загружен (и, возможно, построен).

Я подозреваю, что это как-то связано с keep.sourceпри установке пакета R, как обсуждается в этом вопросе

0 ответов

Другие вопросы по тегам