【发布时间】:2019-10-28 20:09:45
【问题描述】:
我正在尝试按照多阶段方法在 R-base 上构建图像库。如何将安装的软件包从第一阶段复制到第二阶段?没有别的?
当前文件基本上给了我一个“无包”R-base 版本。所以第一阶段安装的包在某处“丢失”了。
我认为这与制作和选择正确的目录有关。这对我来说是一个令人困惑的部分,因为我对 dockerizing 应用程序还很陌生。
感谢您的帮助!
在我当前的文件下面:
# Base image
FROM rocker/r-base:latest AS stage1
## install binary, build and dependend packages
RUN apt-get update && apt-get install -y -qq --no-install-recommends --purge \
r-cran-pdftools \
r-cran-dplyr \
r-cran-stringr \
libxml2-dev \
libssl-dev && \
echo "r <- getOption('repos');r['CRAN'] <- 'http://cran.us.r-project.org'; options(repos = r);" > ~/.Rprofile && \
Rscript -e "install.packages(c('AzureStor'))"
##2nd stage, pulling 'fresh' base image
FROM rocker/r-base:latest
#COPY packages from 1st stage
COPY --from=stage1 /usr/local/lib/R/site-library /usr/local/lib/R/site-library
## create directories
RUN mkdir -p /script \
#Copy scripts
COPY /script /script
## Set workdir
WORKDIR /script
【问题讨论】:
-
你的目标是什么?已安装的包还需要安装所有它们的运行时依赖项(R 包和系统库)。您唯一可以摆脱的是构建时依赖项,通常是系统依赖项的开发包。
-
@RalfStubner 感谢您的回复。我的目标是让这个图像“准备好生产”并消除任何多余的“重量”。所以我需要构建包,但我不需要在图像中运行应用程序。所以你已经回答了:我想摆脱构建时的依赖关系(如果不需要它们来正确运行应用程序)。希望这能回答您的问题。
标签: docker build dockerfile r-package multistage