Как я могу создать образ Docker для запуска как Python, так и R?

1

Я хочу контейнировать конвейер кода, который был преимущественно разработан на Python, но имеет зависимость от модели, которая была обучена на R. Есть некоторые дополнительные зависимости от требований и пакетов, необходимых для обеих баз кода. Как я могу создать образ Docker, который позволит мне создать контейнер, который будет запускать этот код Python и R вместе?

Для контекста у меня есть R-код, который запускает модель (случайный лес), но он должен быть частью конвейера данных, который был построен в Python. Конвейер Python сначала выполняет некоторые функциональные возможности и генерирует входные данные для модели, затем выполняет код R с этими входными данными, прежде чем перенести выходные данные на следующую стадию конвейерного Python.

Итак, я создал шаблон для этого процесса, написав простую тестовую функцию Python для вызова кода R ("test_call_r.py", который импортирует пакет подпроцесса), и мне нужно поместить его в контейнер Docker с необходимыми требованиями и пакетами для и Питон и Р.

Мне удалось построить контейнер Docker для самого конвейера Python, но я не могу успешно установить R и связанные пакеты в соответствии с требованиями Python. Я хочу переписать Dockerfile, чтобы создать образ для этого.

Из документации Dockerhub я могу создать образ для конвейера Python, используя, например,

FROM python:3
WORKDIR /app
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app
CMD [ "python", "./test_call_r.py" ]

И аналогично из Dockerhub я могу использовать базовый образ R (или Rocker) для создания контейнера Docker, который может запускать модель randomForest, например:

FROM r-base
WORKDIR /app    
COPY myscripts /app/
RUN Rscript -e "install.packages('randomForest')"
CMD ["Rscript", "myscript.R"] 

Но мне нужно создать образ, который может установить требования и пакеты для Python и R, и выполнить кодовую базу для запуска R из подпроцесса в Python. Как я могу это сделать?

Теги:
docker
dockerfile
devops

1 ответ

0

Dockerfile, который я создал для Python и R, чтобы работать вместе с их зависимостями следующим образом:

FROM ubuntu:latest

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends build-essential r-base r-cran-randomforest python3.6 python3-pip python3-setuptools python3-dev

WORKDIR /app

COPY requirements.txt /app/requirements.txt

RUN pip3 install -r requirements.txt

RUN Rscript -e "install.packages('data.table')"

COPY . /app

Команды для создания образа, запуска контейнера (здесь он называется SnakeR) и выполнения кода:

docker build -t my_image .
docker run -it --name SnakeR my_image
docker exec SnakeR /bin/sh -c "python3 test_call_r.py"

Я обработал его как ОС Ubuntu и построил образ следующим образом:

  • подавить подсказки для выбора вашего местоположения во время установки R;
  • обновить apt-get;
  • установить критерии установки:
  • y = yes для пользовательских запросов на продолжение (например, выделение памяти);
  • установить только рекомендуемые, а не предлагаемые зависимости;
  • включите некоторые необходимые установочные пакеты для Ubuntu;
  • r-база для программного обеспечения R;
  • r-cran-randomforest для обеспечения доступности пакета (в отличие от отдельной установки data.table, которая по какой-то причине не работала для randomForest);
  • Python3.6 версия Python;
  • python3-pip, позволяющий использовать pip для установки требований;
  • python3-setuptools, чтобы как-то помочь выполнить установки pip (?!);
  • python3-dev для выполнения установки JayDeBeApi как часть требований (в противном случае это путает для Python2, а не 3);
  • укажите активный "рабочий каталог", который будет каталогом /app;
  • скопировать файл требований, содержащий зависимости Python (созданный из виртуальной среды кодовой базы Python, например, с pip freeze);
  • установить пакеты Python из файла требований (pip3 для Python3);
  • установить пакеты R (например, просто data.table здесь);
  • скопируйте содержимое каталога в указанный рабочий каталог/приложение.

Это повторяется из моего сообщения в блоге на https://datascienceunicorn.tumblr.com/post/182297983466/building-a-docker-to-run-python-r

  • 0
    Отличная работа, Джейдог! Как я могу указать версию R, которую я хочу в вашем примере?
  • 0
    Спасибо Карло, хороший вопрос! Я не уверен, так как r-base, кажется, является последней доступной версией. Этот вопрос может помочь: stackoverflow.com/questions/54239485/…

Ещё вопросы

Сообщество Overcoder
Наверх
Меню