Как я могу создать образ Docker для запуска как Python, так и R? - PullRequest
0 голосов
/ 30 января 2019

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

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

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

Мне удалось построить контейнер 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.Как я могу это сделать?

1 Ответ

0 голосов
/ 30 января 2019

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 = да для пользовательских запросов на продолжение (например, выделение памяти);
  • установить только рекомендуемые, не рекомендуемые зависимости;
  • включает некоторые необходимые установочные пакеты для Ubuntu;
  • r-base для программного обеспечения 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 здесь);
  • скопировать содержимое каталога в указанный рабочий каталог /app.

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

...