Большой глянцевый сервер docker размер изображения - PullRequest
0 голосов
/ 06 марта 2020

В настоящее время я собираю смесь ноутбуков R и блестящих панелей управления, которые будут обслуживаться на блестящем сервере. Как можно заметить из Dockerfile, я начинаю с rocker/shiny образа и go с следующих шагов сборки:

  1. Установка необходимых пакетов из renv.lock файла
  2. Выполните main.R, который позаботится о рендеринге файлов .Rmd, и поместите выходные данные. html в папку /reports.
  3. Скопируйте как связанные документы, так и блестящие информационные панели в папку shiny-server для servin.
  4. Скопируйте файл конфигурации сервера Shiny
  5. Удалите временные файлы (рабочий каталог и загруженные пакеты).
  6. Expose 8080 port.

Теперь полученное изображение, полученное таким образом, весит ~ 1,79 ГБ, что звучит намного выше, чем я ожидал (базовое rocker/shiny изображение всего ~ 400 МБ).
Мне интересно, что я отсутствует (возможно, слишком много дублирования слоев?) или что не так с 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

Dockerfile:

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

1 Ответ

0 голосов
/ 06 марта 2020

Удаление файлов с rm -rf не освобождает место. Docker изображения сделаны из аддитивных слоев, немного похоже на коммиты в истории Git - старые слои всегда будут там.

Вы можете попробовать многоэтапные сборки или переключить все эти ЗАПУСКАЕТСЯ за один запуск, который вызывает сценарий оболочки, который затем удаляет файлы в конце сценария оболочки. Поскольку слой создается только в конце RUN, если временные файлы исчезнут к моменту окончания RUN, они не будут занимать место.

...