Ana*_*rKi 2 r docker dockerfile
假设您要为docker镜像安装以下软件包列表
("jsonlite","dplyr","stringr","tidyr","lubridate",
"knitr","purrr","tm","cba","caret",
"plumber","httr")
Run Code Online (Sandbox Code Playgroud)
安装这些实际上需要大约1个小时!
有关如何加速这样的事情的任何建议?(或者如何防止在每次新图像构建时重新安装?)
边注
我不会像这样从dockerfile安装这些软件包:
RUN Rscript -e "install.packages('stringr')
...
Run Code Online (Sandbox Code Playgroud)
相反,我创建了一个R脚本Requirements.R
来安装这些包,并简单地执行:
RUN Rscript Requirements.R
Run Code Online (Sandbox Code Playgroud)
这些不是直接从Dockerfile安装软件包的最佳选择吗?
Jod*_*iug 12
我找到了一篇文章,描述了如何从预编译的二进制文件中安装 R 包。它将我们 Jenkins 服务器上的构建时间从 45 分钟减少到 3 分钟。
这是我的Dockerfile
:
FROM rocker/r-apt:bionic
WORKDIR /app
RUN apt-get update && \
apt-get install -y libxml2-dev
# Install binaries (see https://datawookie.netlify.com/blog/2019/01/docker-images-for-r-r-base-versus-r-apt/)
COPY ./requirements-bin.txt .
RUN cat requirements-bin.txt | xargs apt-get install -y -qq
# Install remaining packages from source
COPY ./requirements-src.R .
RUN Rscript requirements-src.R
# Clean up package registry
RUN rm -rf /var/lib/apt/lists/*
COPY ./src /app
EXPOSE 5000
CMD ["Rscript", "Server.R"]
Run Code Online (Sandbox Code Playgroud)
您可以添加requirements-bin.txt
带有包名称的文件:
r-cran-plumber
r-cran-quanteda
r-cran-irlba
r-cran-lsa
r-cran-caret
r-cran-stringr
r-cran-dplyr
r-cran-magrittr
r-cran-randomforest
Run Code Online (Sandbox Code Playgroud)
最后,requirements-src.R
对于不能作为二进制文件提供的软件包:
pkgs <- c(
'otherpackage'
)
install.packages(pkgs)
Run Code Online (Sandbox Code Playgroud)
使用二进制包,你可以像往常一样在Rocker Project中为R提供多个Docker文件,包括官方的r-base文件.
如果你从Ubuntu开始,那么迈克尔的PPA将拥有超过3000个套餐; 如果你从Debian开始,你可以从发行版中获得更少的内容,但仍然可以使用很多基本内容 (有一些努力为Debian带来了更多的二进制包,但现在什么都没有.)
最后,Dockerfile的创建当然也是编译时间.您花了一次时间(每个容器创建)并在之后的许多时间重复使用.此外,通过使用Docker Hub,您可以避免花费本地cpu周期.
归档时间: |
|
查看次数: |
1196 次 |
最近记录: |