This repository provides official Docker images for development environments used with RawPair. These stacks are designed for collaborative, short-lived sessions—where convenience matters more than minimalism.
Each image includes:
- A full toolchain for a specific language (e.g., Elixir, Ada, Prolog)
- Sane defaults and ready-to-use configuration
- Everything needed to get started without manual setup
These images are intended for ephemeral, sandboxed sessions, not public-facing or production deployments.
They prioritize developer convenience over strict hardening: full toolchains, common tools pre-installed, minimal setup required.
This makes them ideal for short-lived environments where speed and simplicity matter most—like live coding, pair programming, or onboarding sessions.
They are not security-hardened for internet exposure or long-term persistence, and we strongly recommend against using them outside controlled environments.
To integrate properly with RawPair, each container must include:
bash
— shell consistencytmux
— terminal multiplexingsupervisor
— process managementvector
— log streaming to the hostttyd
— exposes the terminal over HTTP
These enable RawPair's real-time terminal access, session orchestration, and logging. Without them, your container will not function correctly inside the system.
Each image must also include three configuration files:
supervisord.conf
ttyd-wrapper.sh
vector.toml
These are provided in the docker/ folder of the main repo. You should copy them into your image during the build process.
You’re free to build your own stacks, but make sure to keep the required components.
In short: build your own, but build smart.
The majority of the Docker images in this repo are available on https://hub.docker.com/u/rawpair
Stack | Docker Repository | Notes |
---|---|---|
Ada | rawpair/ada | Includes GNU GNAT |
Chicken Scheme | rawpair/chicken-scheme | Includes csi, csc, and chicken-install |
Clojure | rawpair/clojure | Runs on Temurin (OpenJDK) |
CBQN | rawpair/cbqn | |
COBOL | rawpair/gnucobol | Includes GNU COBOL |
Elixir | rawpair/elixir | Includes Mix and Hex |
Gambit Scheme | rawpair/gambit-scheme | Includes gsi and gsc |
Guile | rawpair/gnuguile | |
Haskell | rawpair/haskell | Includes GHC |
Janet | rawpair/janet | Includes Janet CLI and jpm |
Julia | rawpair/julia | REPL and package manager built-in |
.NET | rawpair/dotnet | Includes C#, F#, VB.NET, Mono |
Liberty Eiffel | rawpair/liberty-eiffel | Compiled from source |
Metasploit | rawpair/metasploit | Metasploit Framework |
MIT/GNU Scheme | rawpair/mit-gnu-scheme | |
Nim | rawpair/nim | Includes nimble |
Node.js | rawpair/node | Managed via NVM |
OCaml | rawpair/ocaml | Includes OPAM, OCaml 4.14.1, Dune, Menhir |
PHP | rawpair/php | Includes FPM/CLI; PHP 8.0–8.3 |
Python | rawpair/python | 2 base images available: Trixie; NVIDIA CUDA |
Racket | rawpair/racket | Includes raco and CLI REPL |
Ruby | rawpair/ruby | Includes RubyGems |
Rust | rawpair/rust | |
Smalltalk | rawpair/gnusmalltalk | Includes GNU Smalltalk |
Steel Bank Common Lisp | rawpair/sbcl | Includes SBCL and Quicklisp |
Zig | rawpair/zig |
Can't see your favourite stack? Submit a PR or create an issue.
Each Dockerfile is intended to be used by RawPair internally. You can also test them standalone:
cd stacks
./build-images.sh --dry-run
cd stacks
./build-images.sh --filter=elixir
Some Docker images support multi-arch. Although dockerx can build arm64 images via QEMU, this is not recommended as it is painfully slow. Instead, we recommend getting hold of a Raspberry Pi or an ARM server.
Assuming the main docker node is amd64 arch:
docker buildx create --name multiarch --use --platform linux/amd64
Optionally append arm64 remote builder:
docker buildx create --append --name multiarch --platform linux/arm64 arm-vps
Inspect:
docker buildx inspect rawpair-builder --bootstrap
cd stacks
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/ada:bookworm -f ./ada/bookworm/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/ada:trixie -f ./ada/trixie/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/chicken-scheme:bookworm -f ./chicken-scheme/bookworm/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/chicken-scheme:trixie -f ./chicken-scheme/trixie/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/clojure:temurin-21-bookworm -f ./clojure/clojure:temurin-21-bookworm/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/clojure:temurin-22-bookworm -f ./clojure/clojure:temurin-22-bookworm/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/clojure:temurin-23-bookworm -f ./clojure/clojure:temurin-23-bookworm/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/clojure:temurin-24-bookworm -f ./clojure/clojure:temurin-24-bookworm/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/elixir:bookworm -f ./elixir/bookworm/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/gambit-scheme:bookworm -f ./gambit-scheme/bookworm/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/gambit-scheme:trixie -f ./gambit-scheme/trixie/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/cbqn:bookworm -f ./cbqn/bookworm/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/gnucobol:bookworm -f ./gnucobol/bookworm/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/gnucobol:trixie -f ./gnucobol/trixie/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/gnuguile:bookworm -f ./gnuguile/bookworm/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/gnuguile:trixie -f ./gnuguile/trixie/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/gnusmalltalk:trixie -f ./gnusmalltalk/trixie/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/haskell:trixie -f ./haskell/trixie/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/janet:bookworm -f ./janet/bookworm/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/julia:trixie -f ./julia/trixie/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/liberty-eiffel:bookworm -f ./liberty-eiffel/bookworm/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/metasploit:6.4.0 -f ./metasploit/6.4.0/Dockerfile --push .
docker buildx build --platform linux/amd64 -t rawpair/mit-gnu-scheme:bookworm -f ./mit-gnu-scheme/bookworm/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/nim:trixie -f ./nim/trixie/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/node:trixie -f ./node/trixie/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/ocaml:ubuntu-2404 -f ./ocaml/ubuntu-2404/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/php:trixie -f ./php/trixie/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/python:trixie -f ./python/trixie/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/racket:trixie -f ./racket/trixie/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/ruby:trixie -f ./ruby/trixie/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/rust:trixie -f ./rust/trixie/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/sbcl:trixie -f ./sbcl/trixie/Dockerfile --push .
docker buildx build --platform linux/amd64,linux/arm64 -t rawpair/zig:bookworm -f ./zig/bookworm/Dockerfile --push .
Wrap the command with nohup <command> > build.log 2>&1 &
.