Quarto Builder Docker Image

Quarto Builder Docker Image

The following is a simple example of a docker image for rendering Quarto books. This has been tested with PDF and HTML output.

https://github.com/ericjameszimmerman/docker-quarto

How to Build

Dockerfile


FROM ubuntu:22.04

RUN useradd docker \
    && mkdir /home/docker \
    && chown docker:docker /home/docker \
    && addgroup docker staff

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        software-properties-common \
                dirmngr \
                ed \
                gpg-agent \
        less \
        locales \
        vim-tiny \
        wget \
        ca-certificates \
        && wget -q -O - https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc \
                | tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc  \
        && add-apt-repository --enable-source --yes "ppa:marutter/rrutter4.0"

## Configure default locale, see https://github.com/rocker-org/rocker/issues/19
RUN echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \
    && locale-gen en_US.utf8 \
    && /usr/sbin/update-locale LANG=en_US.UTF-8

ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8

## This was not needed before but we need it now
ENV DEBIAN_FRONTEND noninteractive

## Otherwise timedatectl will get called which leads to 'no systemd' inside Docker
ENV TZ UTC

RUN apt-get update \
        && apt-get install -y --no-install-recommends \
                 littler \
          r-base \
          r-base-dev \
          r-recommended \
                 r-cran-docopt \
      && ln -s /usr/lib/R/site-library/littler/examples/install.r /usr/local/bin/install.r \
     && ln -s /usr/lib/R/site-library/littler/examples/install2.r /usr/local/bin/install2.r \
     && ln -s /usr/lib/R/site-library/littler/examples/installGithub.r /usr/local/bin/installGithub.r \
     && ln -s /usr/lib/R/site-library/littler/examples/testInstalled.r /usr/local/bin/testInstalled.r \
      && ln -s /usr/lib/R/site-library/littler/examples/update.r /usr/local/bin/update.r \
     && rm -rf /tmp/downloaded_packages/ /tmp/*.rds \
     && rm -rf /var/lib/apt/lists/*

RUN apt update -qq \
    && apt upgrade --yes \
    && apt install --yes --no-install-recommends dh-r gpg-agent xvfb \
    && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A1489FE2AB99A21A 67C2D66C4B1D4339

RUN apt-get update && apt-get install -y --no-install-recommends \
    pandoc \
    pandoc-citeproc \
    curl \
    gdebi-core \
    libfontconfig1-dev \
    libxml2-dev \
    libcurl4-openssl-dev \
    libharfbuzz-dev libfribidi-dev \
    libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev \
    libssl-dev \
    libnss3-dev libgdk-pixbuf2.0-dev libgtk-3-dev libxss-dev \
    libasound2 \
    default-jre graphviz \
    && rm -rf /var/lib/apt/lists/*

RUN install.r \
    shiny \
    jsonlite \
    ggplot2 \
    htmltools \
    remotes \
    renv \
    knitr \
    rmarkdown \
    quarto \
    tidyverse

RUN curl -LO https://quarto.org/download/latest/quarto-linux-amd64.deb
RUN gdebi --non-interactive quarto-linux-amd64.deb

RUN quarto install tool tinytex
RUN quarto tools install chromium

RUN mkdir -p /opt/plantuml \
    && curl -o /opt/plantuml/plantuml.jar -L "http://sourceforge.net/projects/plantuml/files/plantuml.jar/download" \
    && printf '#!/bin/sh\nexec java -Djava.awt.headless=true -jar /opt/plantuml/plantuml.jar "$@"' > /usr/bin/plantuml \
    && chmod +x /usr/bin/plantuml

CMD ["bash"]

Build Commands

# build image
docker build -t quarto-alpha quarto-ubuntu

# create container
docker run --name quartotest -it quarto-alpha

Quarto Commands

quarto render --to pdf --toc
quarto render --output-dir htmloutput --to html