Я пишу Dockerfile, чтобы создать изображение для веб-сервера (точнее, блестящего сервера). Он работает хорошо, но это зависит от огромной папки базы данных (db/
), которая не распространяется с пакетом, поэтому я хочу выполнить всю эту предварительную обработку при создании образа, запустив соответствующий скрипт в Dockerfile.
Я ожидал, что это будет просто, но я изо всех сил пытаюсь выяснить , где мои файлы находятся внутри изображения.
Репо имеет следующую структуру:
Dockerfile
preprocessing_files
configuration_files
app/
application_files
db/
processed_files
Так что app/db/
не существует, но создается и заполняется файлами при запуске preprocessing_files
.
Dockerfile имеет следующий вид:
# Install R version 3.6
FROM r-base:3.6.0
# Install Ubuntu packages
RUN apt-get update && apt-get install -y \
sudo \
gdebi-core \
pandoc \
pandoc-citeproc \
libcurl4-gnutls-dev \
libcairo2-dev/unstable \
libxml2-dev \
libxt-dev \
libssl-dev
# Download and install ShinyServer (latest version)
RUN wget --no-verbose https://s3.amazonaws.com/rstudio-shiny-server-os-build/ubuntu-12.04/x86_64/VERSION -O "version.txt" && \
VERSION=$(cat version.txt) && \
wget --no-verbose "https://s3.amazonaws.com/rstudio-shiny-server-os-build/ubuntu-12.04/x86_64/shiny-server-$VERSION-amd64.deb" -O ss-latest.deb && \
gdebi -n ss-latest.deb && \
rm -f version.txt ss-latest.deb
# Install R packages that are required
RUN R -e "install.packages(c('shiny', 'flexdashboard','rmarkdown','tidyverse','plotly','DT','drc','gridExtra','fitdistrplus'), repos='http://cran.rstudio.com/')"
# Copy configuration files into the Docker image
COPY shiny-server.conf /etc/shiny-server/shiny-server.conf
COPY /app /srv/shiny-server/
COPY /app/db /srv/shiny-server/app/
# Make the ShinyApp available at port 80
EXPOSE 80
CMD ["/usr/bin/shiny-server"]
Этот файл работает хорошо , если preprocessing_files
запущены заранее, поэтому app/application_files
может успешно прочитать app/db/processed_files
. Как можно запустить этот скрипт в Dockerfile? Мне было бы просто написать интуитивное решение:
RUN bash -c "preprocessing.sh"
До инструкции ADD
, но потом preprocessing_files
не найдено. Если приведенная выше инструкция написана ниже ADD
, а также WORKDIR app/
, возникает та же ошибка. Я не могу понять, почему.