如何创建一个Docker映像来运行Python和R?
我想将主要用Python开发的代码管道封装起来,但它依赖于在R中训练过的模型。这两个代码库都需要一些额外的需求和包。我如何创建一个Docker映像,使我能够构建一个容器来同时运行Python和R代码 对于上下文,我有一个运行模型(随机林)的R代码,但它需要是用Python构建的数据管道的一部分。Python管道首先执行一些功能并为模型生成输入,然后使用该输入执行R代码,然后将输出带到Python管道的下一阶段 因此,我通过编写一个简单的test Python函数来调用R代码(“test_call_R.py”,它导入子流程包),为这个流程创建了一个模板,并需要将其放入一个Docker容器中,其中包含Python和R的必要需求和包 我已经能够为Python管道本身构建Docker容器,但无法成功地按照Python要求安装Docker及其相关包。我想重写Dockerfile以创建一个图像来执行此操作 从Dockerhub文档中,我可以使用,例如如何创建一个Docker映像来运行Python和R?,python,r,docker,dockerfile,devops,Python,R,Docker,Dockerfile,Devops,我想将主要用Python开发的代码管道封装起来,但它依赖于在R中训练过的模型。这两个代码库都需要一些额外的需求和包。我如何创建一个Docker映像,使我能够构建一个容器来同时运行Python和R代码 对于上下文,我有一个运行模型(随机林)的R代码,但它需要是用Python构建的数据管道的一部分。Python管道首先执行一些功能并为模型生成输入,然后使用该输入执行R代码,然后将输出带到Python管道的下一阶段 因此,我通过编写一个简单的test Python函数来调用R代码(“test_call
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类似,我可以使用一个基本的Docker图像(或摇杆)来创建一个Docker容器,该容器可以运行randomForest模型,例如
FROM r-base
WORKDIR /app
COPY myscripts /app/
RUN Rscript -e "install.packages('randomForest')"
CMD ["Rscript", "myscript.R"]
但我需要的是创建一个映像,该映像可以安装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
用于构建映像、运行容器(此处将其命名为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)李>
- python的python3.6版本李>
- python3 pip允许pip用于安装要求李>
- python3 setuptools以某种方式帮助执行pip安装(?)李>
- python3开发人员将执行JayDeBeApi安装作为需求的一部分(否则会混淆的是Python2而不是python3)李>
- 指定活动“工作目录”作为/app位置李>
- 复制保存python依赖项的需求文件(从python代码库的虚拟环境构建,例如,使用pip冻结)李>
- 从需求文件安装Python包(pip3用于Python3)李>
- 安装R软件包(例如,此处仅为data.table)李>
- 将目录内容复制到指定的工作目录/app
这是从我在的博客文章中复制出来的,我为我的个人项目制作了一个图像,如果你愿意,你可以使用它:在Python和R版本上都是特定的,这将避免你将来的麻烦。例如,这种方法将始终安装Rv4.0和PythonV3.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
您的requirements.r文件应该如下所示
install.packages('data.table')
install.packages('jsonlite')
...
干得好,杰多格!如何在您的示例中指定所需的R版本?谢谢Karlo,问得好!我不确定,因为r-base似乎是任何最新版本。这个问题可能有助于: