Interactive development and CI image with shell, toolchains, and optional browser
8.7K
Ubuntu and Alpine images for interactive development and CI jobs, built on
core in three tiers. Each image runs a Zsh login shell as
sysadmin (UID and GID 1000) with passwordless sudo. The AI images
build FROM devbox.
ubuntu-lite: Ubuntu 24.04 with a Zsh shell, Git, editors, and search tools.
core:ubuntuubuntu-litealpine-lite: Alpine 3.24 with the same shell and tools.
core:alpinealpine-liteubuntu-full: Ubuntu 24.04 with language toolchains, the Docker CLI, and Kubernetes and forge CLIs.
core:ubuntuubuntu-fullalpine-full: Alpine 3.24 with the same toolchains and OpenRC in place of systemd.
core:alpinealpine-fullubuntu-browser: ubuntu-full plus chromedp headless-shell.
core:ubuntuubuntu-browser, latestalpine-browser: alpine-full plus Chromium.
core:alpinealpine-browserPull ghcr.io/hambn/devbox:<tag> or docker.io/hambn/devbox:<tag>. Every tag moves
when the image is rebuilt; pin a digest to keep one build. Tool versions are pinned as
ARG defaults in the Dockerfile.
| Tier | Use it for |
|---|---|
| lite | Quick interactive work, or a small CI base when you install your own tools. |
| full | Development and CI with Python, Node.js, Go, and the Docker, Kubernetes, and forge CLIs. |
| browser | Agents and tests that drive a headless browser, found at $BROWSER_BIN. Run it with --shm-size=1g. |
Every tier starts in /home/sysadmin with /bin/zsh -l. /home/sysadmin also holds
the Zsh configuration. A bind mount or Kubernetes volume over the whole directory hides
it, so mount subdirectories such as ~/.cache instead. A new Docker named volume is
safe, because Docker copies the image's files into it on first use.
npm install -g installs into /home/sysadmin/.local, which comes first on PATH. An
agent can therefore update itself without sudo, and its newer version takes
precedence over the pinned one in /usr/local/bin. The update lives in the
container's home directory, so a new container starts with the pinned version again.
Each tier contains everything in the tier before it.
git and kubectl plugins$EDITOR), tmux, and Ghostty terminfoping with cap_net_rawsysadmin is in the docker group/workspace directory owned by
sysadminchromedp/headless-shell at /headless-shell/headless-shellchromium package at /usr/bin/chromium-browser$BROWSER_BIN points to the browser on both.
No daemon starts with the default command. For container builds, mount the host's
Docker socket or set DOCKER_HOST.
On ubuntu-full and ubuntu-browser, a privileged container started as root with
/sbin/init boots systemd with a container profile:
multi-user.target as the default target/tmp kept across the boot, with 30-day cleanupsysadminThe Alpine images use OpenRC and install no Docker daemon.
Content type
Image
Digest
sha256:4112da741…
Size
1012.1 MB
Last updated
4 days ago
docker pull hambn/devbox