Skip to content

jpwhite3/polyglot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Docker

Polyglot

Multi programming language container image built for interactive development environments like:

NOTE: This image is large, around 3.5GB in total. This makes it far too big for most large scale uses. But in small scale it seems to work quite well despite its size.

The Dockerfile is built with several size and speed optimizations:

  • BuildKit cache mounts on /var/cache/apt, /var/lib/apt, and /root/.cache/pip so repeated builds skip re-downloading packages and pip wheels (cached rebuilds with no Dockerfile changes take ~1–2 seconds).
  • Rust is installed with --profile minimal and only clippy + rustfmt are added back, dropping the ~700MB rust-docs component.
  • Docker is the CLI + buildx + compose plugins from Docker's official apt repo only — the daemon and containerd are intentionally omitted (~600MB savings); typical use is to mount the host's docker socket into the container.
  • Java uses the highest openjdk-N-jdk-headless available (no Swing/AWT, ~200MB savings).
  • .NET installs the SDK only — the SDK already ships with the matching runtime, so the runtime package is redundant.
  • Go's bundled doc/, test/, and api/ directories are stripped after install (~100MB savings).

Base Image

This image is based on Ubuntu 24.04 LTS (Noble Numbat) — the only version that is explicitly pinned in the Dockerfile. All other tools are resolved dynamically on every build (see below).

Included Languages & Tools

No tool versions are pinned in the Dockerfile. Every make build resolves and installs the latest available release of each language and tool from upstream, so a freshly built image is always current. The Docker GitHub Actions workflow also runs on a weekly schedule to republish the image with the newest versions even when nothing has been committed.

How "latest" is determined for each tool:

Tool How the latest version is resolved at build time
Go Queries https://go.dev/VERSION?m=text for the current stable
nvm Queries the GitHub releases API for nvm-sh/nvm
Node.js nvm install --lts (current LTS line)
Java Highest openjdk-N-jdk-headless available in the Ubuntu apt repos
.NET Highest dotnet-sdk-X.Y available in the Ubuntu apt repos (SDK only; bundles its own runtime)
Python python3 from the Ubuntu apt repos
Ruby ruby-full from the Ubuntu apt repos
Rust rustup (--profile minimal + clippy + rustfmt)
Docker docker-ce-cli, docker-buildx-plugin, docker-compose-plugin from Docker's official apt repo
poetry / pipenv / pipx Latest from PyPI via pip
Claude Code (claude) Anthropic's official installer at https://claude.ai/install.sh
Antigravity CLI (agy) Google's official installer at https://antigravity.google/cli/install.sh
Opencode (opencode) Official installer at https://opencode.ai/install

The table below is auto-regenerated by make build and reflects the versions that were actually resolved during the most recent build of this image.

Language Ecosystem Version Included Tools
Node 24.16.0 nvm, npm
Python 3.12.3 poetry, pipenv, pipx
Java 25.0.2
Dotnet 10.0.107
GO 1.26.3
Ruby 3.2.3 rbenv, gem
Rust 1.95.0
Docker 29.5.2

Agentic AI coding tools

The image also bundles several agentic AI coding CLIs. Each is installed from its official upstream installer script, so every build pulls the newest release.

Tool Invoke as Installer
Claude Code claude curl -fsSL https://claude.ai/install.sh | bash
Antigravity CLI agy curl -fsSL https://antigravity.google/cli/install.sh | bash
Opencode opencode curl -fsSL https://opencode.ai/install | bash

Build Instructions

Prerequisites

  • You are running in a unix-like environment (Linux, MacOS)
  • Docker Desktop

Build

Builds the image. Each invocation pulls the latest available version of every tool listed above and then refreshes the version table in this README.md to match.

make build

Shell

Starts a container form this image and drops you into a shell.

make shell

Publish

Attempts to build then publish the image to Docker Hub.

make publish

About

Multi programming language container image built for interactive development environments

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors