This repository contains customized Docker images, built on a regular schedule using cache to avoid unnecessary rebuilds.
- Create a new directory.
- Add all the necessary files to that new directory (
Dockerfile
+ any dependencies). - Add the name of the directory to the
stages.yml
file. If the docker image depends on an existing one, add it to the next stage otherwise add it to stage-1. - Add the image to the list of images in this file.
- Make sure that no other docker files depends on it.
- Remove the directory.
- Remove the directory name from the
stages.yml
file. - Remove the image from this file.
Several Docker images in this repository use a date.txt
file for cache invalidation to ensure fresh package installations. The COPY date.txt /date.txt
instruction forces Docker to rebuild the entire pipeline from that point when the date.txt file changes.
Important: Do not remove COPY date.txt /date.txt
lines from Dockerfiles as they are essential for proper cache invalidation.
This repository follows specific patterns for optimal Docker image construction:
- Concatenated Commands: Related RUN commands are combined using
&&
to minimize Docker layers and reduce image size - Cleanup Strategy: All Dockerfiles include cleanup commands (
rm -rf /var/lib/apt/lists/* && rm -rf /tmp/* && rm -rf /var/tmp/*
) to remove temporary files and package caches - Logical Grouping: Operations are grouped logically (system packages, R packages, configuration) within single RUN instructions
- Package Management: R packages are installed using
pak::pak()
for better performance and dependency resolution
This repository includes automated tools for managing FROM instructions in Dockerfiles according to directory hierarchy:
- Root-level images (e.g.,
rig-ubuntu
,rig-debian
) use external base images and their FROM instructions should not be modified - Nested images (e.g.,
rig-ubuntu/duckdb
,rig-ubuntu/duckdb/dev
) should inherit from their parent directory image
# Check what FROM instructions would be updated (dry run)
make check-from
# Update FROM instructions according to hierarchy
make update-from
# Generate dependency analysis with FROM validation
make analysis
The system automatically:
- Validates that nested images inherit from the correct parent image
- Updates FROM instructions to follow the directory hierarchy convention
- Provides clear reporting of any inconsistencies
Based on rig-ubuntu, configured for database management and modeling tasks. Includes Microsoft ODBC Driver 18 for SQL Server and system tools (gnupg, lsb-release, time) for enterprise database connectivity. Installs R packages from DESCRIPTION file.
Dependency: rig-ubuntu Development environment for working with DuckDB using R 4.x. Includes necessary build tools and optimized for legacy R compatibility.
Dependency: ubuntu:latest Minimal Ubuntu-based image with basic setup. Serves as a lightweight base for specialized use cases.
Dependency: ubuntu:22.04 Comprehensive debugging environment for R memory problems and low-level issues. Contains multiple instrumented builds of R-devel:
r-debug-r-devel
: Base R-devel without optimizations (-O0) for debuggingr-debug-valgrind
: R-devel with valgrind level 2 instrumentationr-debug-san
: R-devel with GCC Address Sanitizer and Undefined Behavior Sanitizerr-debug-csan
: R-devel with Clang sanitizersr-debug-strictbarrier
: R-devel with strict barrier checkingr-debug-threadcheck
: R-devel with thread safety checking
Each variant provides specialized debugging capabilities for detecting memory errors, undefined behavior, and thread safety issues. Based on Winston Chang's original r-debug Docker images.
Dependency: rig-ubuntu PostgreSQL-enabled R environment with postgresql-client and essential system tools. Configured for database development workflows. Installs packages specified in DESCRIPTION file.
Dependency: kalibera/rchk:latest R check environment with igraph dependencies, based on kalibera/rchk. Includes libglpk-dev for graph optimization algorithms. Used for rigorous package checking and validation.
Dependency: almalinux/9-base AlmaLinux 9 with rig installed. Includes essential system packages (curl, sudo, locales, ccache), proper locale configuration (en_US.UTF-8), and optimized R build configuration (MAKEFLAGS=-j4). Foundation image without R installed.
Dependency: rig-alma9 AlmaLinux 9 with R release installed via rig. Ready-to-use R environment for production workflows.
Dependency: debian Debian-based rig environment for compatibility testing and specialized Debian workflows.
Dependency: rockylinux:8 Rocky Linux 8-based rig environment for enterprise RHEL-compatible development and testing.
Dependency: ubuntu Ubuntu-based rig environment with base R installation capabilities. Serves as foundation for many other specialized images.
Dependency: rig-ubuntu Database interface development environment with comprehensive R database packages (DBI, RMariaDB, RPostgres, RSQLite, dm, duckdb, odbc, adbi) installed for both R release and R-devel. Includes development tools and system dependencies for database connectivity.
Dependency: rig-ubuntu DuckDB development environment with build tools (python3, ninja-build, cmake) and R packages (duckplyr, cpp11, decor, devtools). Configured with DUCKDB_R_DEBUG=1 for development debugging.
Dependency: rig-ubuntu Like rig-ubuntu-duckdb, but with R 4.1.3 for compatibility testing. Includes duckdb, cpp11, decor, and devtools packages.
Dependency: rig-ubuntu-duckdb Development environment with latest development versions of duckdb-r and duckplyr cloned and installed from GitHub repositories. Uses date.txt for cache invalidation.
Dependency: rig-ubuntu Graph analysis environment with igraph and its system dependencies (cmake, flex, bison, libglpk-dev, libgmp-dev, libarpack2-dev, python3-venv). Includes igraph, cpp11, and devtools R packages.
Dependency: rig-ubuntu Reverse dependency checking environment with r-lib/revdepcheck package for comprehensive package testing workflows.
Dependency: ubuntu:24.04 Ubuntu 24.04 base with rig installed. Includes essential system packages (curl, sudo, locales, ccache), proper locale configuration (en_US.UTF-8), and optimized R build configuration (MAKEFLAGS=-j4). Foundation image without R installed.
Dependency: rig-ubuntu24 Ubuntu 24.04 with R release installed via rig. Ready-to-use R environment for production workflows.
Dependency: rig-ubuntu24-rrel Development environment based on R release with essential development tools (git, vim, nano, htop, tree, wget, ca-certificates) and R development packages (devtools, usethis, languageserver). Optimized for R package development workflows.
Dependency: rig-ubuntu24 Ubuntu 24.04 with R devel installed via rig. Used for testing packages against cutting-edge R development versions.
Dependency: rig-ubuntu24-rdev Development environment based on R devel with essential development tools (git, vim, nano, htop, tree, wget, ca-certificates) and R development packages (devtools, usethis, languageserver). Optimized for bleeding-edge R package development.
Dependency: rig-ubuntu24-rdev Specialized environment with GCC 14 compiler to replicate CRAN compiler warnings and testing conditions. Configured with update-alternatives for proper compiler selection and enhanced warning flags for thorough code validation.
Dependency: rig-ubuntu24-gcc14 GCC 14 environment optimized for DuckDB development, including build dependencies (python3, ninja-build, cmake) and essential R packages (DBI, cpp11). Configured with DUCKDB_R_DEBUG=1.
Dependency: wch1/r-debug:latest Specialized testing environment for rigraph package using multiple R debug variants (RD, RDvalgrind, RDsan, RDcsan, RDthreadcheck). Includes sanitizer configurations (ASAN_OPTIONS) and required system libraries for comprehensive memory and thread safety testing.
Dependency: alpine:latest
Lightweight Alpine-based image with sops
and age
for secret management and encryption workflows. Includes essential tools (git, curl, bash, jq) for CI/CD pipelines.
Dependency: ghcr.io/tofutf/tofutf/tofutfd:v0.10.0-4-g1de178b7 Terraform/OpenTofu environment with additional tooling including 1Password CLI and AWS CLI for infrastructure automation and secret management.