Files
football-competitiveness/Dockerfile
T
John Gatward 25b8e5c250
Build and Push Docker Image / build (push) Successful in 1m11s
[main]: normalise csv headers
2026-08-05 09:23:34 +01:00

60 lines
2.0 KiB
Docker

# syntax=docker/dockerfile:1.7
FROM rocker/shiny:4.4.0
# System dependencies commonly required by R packages
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
libcurl4-openssl-dev \
libssl-dev \
libxml2-dev \
libgit2-dev \
libfontconfig1-dev \
libharfbuzz-dev \
libfribidi-dev \
libfreetype6-dev \
libpng-dev \
libjpeg-dev \
libtiff5-dev \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /srv/shiny-server
# Copy dependency manifests first so package restore can be cached
COPY renv.lock /srv/shiny-server/renv.lock
COPY renv /srv/shiny-server/renv
COPY .Rprofile /srv/shiny-server/.Rprofile
# Prevent renv attempting to use pak
ENV RENV_CONFIG_PAK_ENABLED=FALSE
ENV RENV_DOWNLOAD_METHOD=libcurl
ENV RENV_PATHS_CACHE=/srv/shiny-server/renv/cache
# Some CRAN packages in this lockfile fail under Ubuntu hardening defaults
# because -Werror=format-security turns benign warnings into build failures.
RUN for f in /usr/local/lib/R/etc/Makeconf /usr/lib/R/etc/Makeconf; do \
if [ -f "$f" ]; then \
sed -i 's/-Werror=format-security/-Wno-error=format-security/g' "$f"; \
fi; \
done
# Install renv and restore project packages
RUN R --vanilla -e "install.packages('renv', repos='https://cran.rstudio.com')" && \
R --vanilla -e "source('.Rprofile'); renv::restore(prompt=FALSE)"
# Copy the application after dependencies so regular code changes do not
# invalidate the expensive restore layer.
COPY . /srv/shiny-server/
# Permissions
RUN chown -R shiny:shiny /srv/shiny-server
# Fail the image build if the app cannot start in the same user context as
# Shiny Server, rather than discovering startup errors after deployment.
RUN su -s /bin/sh shiny -c "cd /srv/shiny-server && R --vanilla -e 'source(\".Rprofile\"); source(\"global.R\")'"
EXPOSE 3838
HEALTHCHECK --interval=30s --timeout=5s --start-period=90s --retries=3 \
CMD curl --fail --silent --show-error http://127.0.0.1:3838/ || exit 1
CMD ["/usr/bin/shiny-server"]