大的shiny服务器Docker图像大小

pb3s4cty  于 2023-03-01  发布在  Docker
关注(0)|答案(2)|浏览(104)

我目前正在对接一个由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
hgb9j2n6

hgb9j2n61#

一些建议,以获得一个较小的Docker映像包含一个闪亮的应用程序(有或没有闪亮的服务器):

  • 使用loads of packages附带的rocker/shiny以外的其他基础映像,例如rocker/r-base,并只安装实际使用的R包。两个基础映像上的一个小图标显示了大小差异的大小:
rocker/shiny    latest         1aecb46da7ee   2 weeks ago         1.47GB
rocker/r-base   latest         ce611fb80498   3 months ago        838MB
  • 更进一步,调整rocker Dockerfiles themselves来构建一个只包含真正必要的部分的自定义摇杆图像(或者从头构建一个全新的图像)可能会有所帮助。
  • 如果Alpine Linux是一个选项,则rhub offers minimal Docker images for R
  • 使用一个.dockerignore文件来确保映像中只包含需要的文件(还有一个很好的副作用,就是加快了构建过程)
  • 考虑使用multi-stage build

欢迎更多和其他方法:)

jfewjypa

jfewjypa2#

使用rm -rf删除文件不会释放任何空间。Docker映像是由附加层组成的,有点像Git历史中的提交-旧的层将始终存在。
您可以尝试多阶段构建,或者您可以将所有这些RUN切换到一个单独的运行中,调用shell脚本,然后在shell脚本结束时删除文件。由于层只在RUN结束时创建,如果临时文件在RUN结束时消失,它们不会占用任何空间。

相关问题