Jay*_*dog 4 python r docker dockerfile devops
我想将主要在Python中开发的代码管道进行容器化,但是它依赖于R中训练的模型。这两个代码库都需要一些要求和程序包。如何创建一个Docker映像,以允许我构建一个可以同时运行此Python和R代码的容器?
对于上下文,我有一个运行模型(随机森林)的R代码,但它必须是用Python构建的数据管道的一部分。Python管道首先执行一些功能,并为模型生成输入,然后使用该输入执行R代码,然后再将输出带到Python管道的下一阶段。
因此,我通过编写一个简单的测试Python函数来调用R代码(导入了子流程包的“ test_call_r.py”)来创建了此过程的模板,并需要将其放入具有必要要求和包的Docker容器中Python和R。
我已经能够为Python管道本身构建Docker容器,但是无法成功安装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" ]
Run Code Online (Sandbox Code Playgroud)
而且类似Dockerhub,我可以使用基本R映像(或Rocker)创建可以运行randomForest模型的Docker容器,例如,
FROM r-base
WORKDIR /app
COPY myscripts /app/
RUN Rscript -e "install.packages('randomForest')"
CMD ["Rscript", "myscript.R"]
Run Code Online (Sandbox Code Playgroud)
但是我需要创建一个可以同时安装Python和R的要求和程序包的映像,并执行代码库以从Python的子进程运行R。我怎样才能做到这一点?
我为Python和R构建的Dockerfile与依赖关系一起以这种方式运行:
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
Run Code Online (Sandbox Code Playgroud)
用于生成映像,运行容器(在此处将其命名为SnakeR)并执行代码的命令为:
docker build -t my_image .
docker run -it --name SnakeR my_image
docker exec SnakeR /bin/sh -c "python3 test_call_r.py"
Run Code Online (Sandbox Code Playgroud)
我将其视为Ubuntu OS,并按如下所示构建映像:
这是从我在https://datascienceunicorn.tumblr.com/post/182297983466/building-a-docker-to-run-python-r的博客文章中复制的
详细了解 Python 和 R 版本将为您节省未来的麻烦。例如,这种方法将始终安装 R v4.0 和 Python v3.8
FROM r-base:4.0.3
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends build-essential libpq-dev python3.8 python3-pip python3-setuptools python3-dev
RUN pip3 install --upgrade pip
ENV PYTHONPATH "${PYTHONPATH}:/app"
WORKDIR /app
ADD requirements.txt .
ADD requirements.r .
# installing python libraries
RUN pip3 install -r requirements.txt
# installing r libraries
RUN Rscript requirements.r
Run Code Online (Sandbox Code Playgroud)
你的requirements.r文件应该看起来像
install.packages('data.table')
install.packages('jsonlite')
...
Run Code Online (Sandbox Code Playgroud)