book/docs/CONTAINER_BUILDS.md
This document describes the containerized build system for MLSysBook that significantly reduces build times from 45 minutes to 5-10 minutes for Linux builds.
Current Linux Build (45 minutes):
├── Install system packages (5-10 min)
├── Install TeX Live (15-20 min)
├── Install R packages (5-10 min)
├── Install Python packages (2-5 min)
├── Install Quarto (1-2 min)
└── Build content (5-10 min)
Containerized Linux Build (5-10 minutes):
├── Pull container (30 seconds)
├── Checkout code (30 seconds)
└── Build content (5-10 min)
book/docker/linux/Dockerfile - Linux build container definitionbook/docker/linux/README.md - Linux container documentationbook/docker/linux/.dockerignore - Linux build exclusionsbook/docker/windows/Dockerfile - Windows build container definitionbook/docker/windows/README.md - Windows container documentationbook/docker/windows/.dockerignore - Windows build exclusionsghcr.io/harvard-edge/cs249r_book/quarto-linuxghcr.io/harvard-edge/cs249r_book/quarto-windowsYou can build the containers locally using these commands:
docker build -f book/docker/linux/Dockerfile -t mlsysbook-linux .
docker build -f book/docker/windows/Dockerfile -t mlsysbook-windows .
# Test containerized build
gh workflow run book-build-container.yml \
--field build_linux=true \
--field build_windows=false \
--field build_html=true \
--field build_pdf=false \
--field build_epub=false \
--field build_target=vol1 \
--field target=dev
ghcr.io/harvard-edge/cs249r_book/quarto-linuxghcr.io/harvard-edge/cs249r_book/quarto-windowslatest, main, dev, branch-specific tagsbook-build-container.yml - Containerized book build matrixinfra-container-linux.yml - Linux container image managementinfra-container-windows.yml - Windows container image managementR_LIBS_USER=/usr/local/lib/R/library
QUARTO_LOG_LEVEL=INFO
PYTHONIOENCODING=utf-8
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
docker build -t test .ghcr.io/harvard-edge/cs249r_book/quarto-linux:latestIf issues arise:
To build the containers, use the standard docker build command:
# For Linux
docker build -f book/docker/linux/Dockerfile -t mlsysbook-linux .
# For Windows
docker build -f book/docker/windows/Dockerfile -t mlsysbook-windows .