Я хочу контейнировать конвейер кода, который был преимущественно разработан на 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. Как я могу это сделать?
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 и построил образ следующим образом:
Это повторяется из моего сообщения в блоге на https://datascienceunicorn.tumblr.com/post/182297983466/building-a-docker-to-run-python-r