我目前正在对接一个由R笔记本和闪亮的 Jmeter 板组成的混合体,它将在一个闪亮的服务器中提供服务。从Dockerfile中可以注意到,我从rocker/shiny
映像开始,并完成以下构建步骤:
1.从renv.lock
文件安装所需的软件包
1.执行main.R
,它将负责呈现. rmd文件,并将. html输出放在/reports
文件夹中。
1.在shiny-server
文件夹中复制编织的文档和闪亮的 Jmeter 板以备使用。
1.复制闪亮的服务器配置文件
1.删除临时文件(工作目录和下载的包)。
1.暴露8080
端口。
现在,以这种方式构建的结果图像重约1. 79GB,这听起来远远高于我的预期(基本rocker/shiny
图像只有约400MB)。
我想知道我错过了什么(太多的层重复也许?)或什么是错的Dockerfile
。
项目文件夹结构:
.
├── cool-report.Rproj
├── Dockerfile
├── R
│ └── main.R
├── readme.md
├── renv
│ ├── activate.R
│ ├── library
│ ├── settings.dcf
│ └── staging
├── renv.lock
├── rmarkdown
│ ├── area1.Rmd
│ ├── area2.Rmd
│ └── data
│ ├── data_import_1.R
│ └── data_import_2.R
├── shiny
│ └── mtcars_example
│ └── app.R
└── shiny-server.conf
停靠文件:
FROM rocker/shiny:latest
COPY . /tmp
WORKDIR /tmp
RUN echo "options(renv.consent=TRUE)" >> .Rprofile
# Install packages from renv
RUN R -e "install.packages('remotes', repos = c(CRAN = 'https://cloud.r-project.org'))" \
&& R -e "remotes::install_github('rstudio/renv')" \
&& R -e "renv::restore(confirm = FALSE)"
# Render report(s)
RUN Rscript ./R/main.R
# Copy reports and shiny dashboards
RUN cp -r ./reports /srv/shiny-server/reports \
&& cp -r shiny/* /srv/shiny-server/reports
WORKDIR /
# Copy config files and server executable
COPY shiny-server.conf /etc/shiny-server/shiny-server.conf
# Cleanup temp files
RUN rm -rf /tmp/*
# Expose port as on shiny-server.conf
EXPOSE 8080
docker image history -H <image-id>
输出:
andodet@t480s:~/code/study/cool-report$ docker image history -H d21975ad912d
IMAGE CREATED CREATED BY SIZE COMMENT
d21975ad912d About an hour ago /bin/sh -c #(nop) EXPOSE 8080 0B
11345fbe7c72 About an hour ago /bin/sh -c rm -rf /tmp/* 0B
ce8b33984b85 About an hour ago /bin/sh -c #(nop) COPY file:1d2d0c462c909cc4… 741B
761bc2a982cd About an hour ago /bin/sh -c #(nop) WORKDIR / 0B
5aa2ae037138 About an hour ago /bin/sh -c cp -r ./reports /srv/shiny-server… 1.76MB
12b3a3505ae9 About an hour ago /bin/sh -c Rscript ./R/main.R 1.76MB
69cacc1ad08d About an hour ago /bin/sh -c R -e "install.packages('remotes',… 328MB
eb07c8335c8f 2 hours ago /bin/sh -c echo "options(renv.consent=TRUE)"… 53B
55a14476302f 2 hours ago /bin/sh -c #(nop) WORKDIR /tmp 0B
84e502e37546 2 hours ago /bin/sh -c #(nop) COPY dir:dfcc724126bc931ba… 31.3MB
f40ad3a5dadd 5 weeks ago /bin/sh -c #(nop) CMD ["/usr/bin/shiny-serv… 0B
<missing> 5 weeks ago /bin/sh -c #(nop) COPY file:fef7b189480bb622… 359B
<missing> 5 weeks ago /bin/sh -c #(nop) EXPOSE 3838 0B
<missing> 5 weeks ago /bin/sh -c wget --no-verbose https://downloa… 513MB
<missing> 5 weeks ago /bin/sh -c apt-get update && apt-get install… 313MB
<missing> 2 months ago /bin/sh -c #(nop) CMD ["R"] 0B
<missing> 2 months ago /bin/sh -c apt-get update && apt-get insta… 506MB
<missing> 2 months ago /bin/sh -c #(nop) ENV R_VERSION=3.6.1 LC_AL… 0B
<missing> 2 months ago /bin/sh -c #(nop) ENV BUILD_DATE=2019-12-12 0B
<missing> 2 months ago /bin/sh -c #(nop) ARG BUILD_DATE 0B
<missing> 2 months ago /bin/sh -c #(nop) ARG R_VERSION 0B
<missing> 2 months ago /bin/sh -c #(nop) LABEL org.label-schema.li… 0B
<missing> 2 months ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 2 months ago /bin/sh -c #(nop) ADD file:8f7dc710e276f54a3… 101MB
2条答案
按热度按时间hgb9j2n61#
一些建议,以获得一个较小的Docker映像包含一个闪亮的应用程序(有或没有闪亮的服务器):
rocker/shiny
以外的其他基础映像,例如rocker/r-base
,并只安装实际使用的R包。两个基础映像上的一个小图标显示了大小差异的大小:欢迎更多和其他方法:)
jfewjypa2#
使用
rm -rf
删除文件不会释放任何空间。Docker映像是由附加层组成的,有点像Git历史中的提交-旧的层将始终存在。您可以尝试多阶段构建,或者您可以将所有这些RUN切换到一个单独的运行中,调用shell脚本,然后在shell脚本结束时删除文件。由于层只在RUN结束时创建,如果临时文件在RUN结束时消失,它们不会占用任何空间。