Я первоначально разместил вопрос на форуме Docker, но еще не получил ни одного комментария, поэтому размещаю его здесь, поскольку на SO гораздо больше трафика.
https://forums.docker.com/t/using-multi-stage-docker-build-for-slimming-down-images-with-r-dependency/67967
Водним предложением, я пытаюсь уменьшить мой док R / python, любые предложения приветствуются!Спасибо!
Итак, я создаю образы докеров для некоторых приложений, которые имеют R-зависимости, но наивный процесс сборки, который я написал (см. Ниже для Dockerfile, этап 1), приводит к IMO, завышенный размер изображения.
Поэтому я подумываю об использовании многоэтапной сборки, читая о том, как это здорово для уменьшения размера изображения.
Очевидно, просто копируя R & Rscript
бинарный и пакеты из уровня сборки не будут работать, так как я получил следующее сообщение об ошибке, указывающее, что мне также нужно скопировать эти динамические зависимости libs.
/usr/lib/R/bin/R: line 238: /usr/lib/R/etc/ldpaths: No such file or directory
/usr/lib/R/bin/exec/R: error while loading shared libraries: libR.so: cannot open shared object file: No such file or directory
Так что мой вопрос,
- мой подход в корне ошибочен (или вообще не стоит того, чтобы сэкономить место на обслуживании / обслуживании), или
- мне просто нужно скопировать еще несколько библиотек?
И проблема, связанная с удаленно: будет ли подобный сценарий и для зависимостей Python?
Спасибо!
Иллюстрация с R
####### stage 1: build
FROM ubuntu:18.10 as builder
# update OS libs
ARG OS_LIBS="software-properties-common libcurl4-openssl-dev libssl-dev libxml2-dev gpg-agent gnupg"
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get -qqy update --fix-missing && \
apt-get -qqy full-upgrade && \
apt-get -qqy install --no-install-recommends \
${OS_LIBS} && \
apt-get autoremove --purge -y && apt-get autoclean -y && \
rm -rf /var/cache/apt/* /var/lib/apt/lists/* /var/tmp/* /tmp/* /usr/share/man/?? /usr/share/man/??_*
# install base R
ARG R_RELEASE_VERSION="3.5.1"
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9 && \
add-apt-repository "deb http://cran.rstudio.com/bin/linux/ubuntu cosmic-cran35/" && \
apt-get -qqy update --fix-missing && \
apt-get -qqy full-upgrade && \
apt-get -qqy install --no-install-recommends \
r-base-core="${R_RELEASE_VERSION}"-1build1 \
r-base-dev="${R_RELEASE_VERSION}"-1build1
# this is just a toy example
RUN R -e -vanilla 'install.packages("data.table", destdir = "/tmp/R_pkg_download/", clean = TRUE)'
####### stage 2: copy the binary and libs
FROM ubuntu:18.10
RUN mkdir -p /usr/lib/R \
/usr/local/lib/R/site-library
COPY --from=builder /usr/bin/R /usr/bin/R
COPY --from=builder /usr/bin/Rscript /usr/bin/Rscript
COPY --from=builder /usr/lib/R /usr/lib/R
COPY --from=builder /usr/local/lib/R/site-library /usr/local/lib/R/site-library