Sign inSign up

peculiarengineer/ubuntu-dev

By peculiarengineer

•Updated 2 days ago

Lean Ubuntu devcontainer base — dev toolset, non-root sudo user, multi-arch amd64/arm64

Image
0

673

peculiarengineer/ubuntu-dev repository overview

⁠ubuntu-dev

A lean Ubuntu devcontainer base image with a standard dev toolset and a passwordless-sudo vscode user. Multi-arch (amd64 / arm64).

TagBaseNotes
26.04, latestubuntu:26.04LTS — the default, latest always points here
26.10ubuntu:26.10
develubuntu:develUbuntu's development base; today the same as 26.10

devel follows ubuntu:devel. Right now that is 26.10; after 26.10 ships it moves to the next development release once Ubuntu opens it.

docker pull peculiarengineer/ubuntu-dev:26.04

Docker Pulls Image Size

⁠What's inside

  • Base: ubuntu:26.04 by default — one Dockerfile builds every tag above via --build-arg UBUNTU_VERSION=<version>
  • User: non-root vscode (UID/GID 1000) with passwordless sudo
  • Init: tini as PID 1 (clean signal handling)
  • Locale: en_US.UTF-8
  • Tools: build-essential, pkg-config, git, curl/wget, ripgrep (rg), fd, jq, vim/nano, zsh, bash-completion, htop, tree, unzip/zip, openssh-client, man, lsb-release

Anything language-specific (Node, Python, Go, Docker-in-Docker, gh) is left to Dev Container Features so the base stays small — see .devcontainer/devcontainer.json.

⁠Use as a devcontainer

Open the folder in VS Code → Reopen in Container. The included .devcontainer/devcontainer.json builds from the Dockerfile. To consume the published image instead, replace the build block with:

"image": "peculiarengineer/ubuntu-dev:26.04"

⁠Use standalone

# Build
docker build -t peculiarengineer/ubuntu-dev:26.04 .

# Build another base version (e.g. 26.10 or devel)
docker build --build-arg UBUNTU_VERSION=26.10 -t peculiarengineer/ubuntu-dev:26.10 .

# Interactive shell as the non-root user
docker run --rm -it peculiarengineer/ubuntu-dev:26.04

# Mount your project and work in it
docker run --rm -it -v "$PWD":/work -w /work peculiarengineer/ubuntu-dev:26.04

⁠Multi-arch build

docker buildx build --platform linux/amd64,linux/arm64 \
  -t peculiarengineer/ubuntu-dev:26.04 --push .

⁠Staying up to date

The published images are rebuilt automatically by .github/workflows/build.yml⁠:

  • Weekly (Mondays 06:00 UTC) and on any change to the Dockerfile.
  • A matrix builds all three bases (26.04, 26.10, devel) with --pull, so each run re-fetches the ubuntu base, and an APT_REFRESH build argument that changes every run (and every re-run attempt) makes the package layer reinstall the current apt packages instead of reusing the build cache.
  • Each leg runs a smoke test (tests/smoke.sh) on an amd64 build before pushing, so a base that fails it is not published (arm64 is built but not run). Tags pushed: :26.04 + :latest, :26.10, and :devel.
  • A keepalive job re-enables the workflow through the GitHub API on every scheduled run — GitHub disables scheduled workflows after 60 days without repository activity, which is how the rebuilds silently stopped before.

Requires two repository secrets: DOCKERHUB_USERNAME and DOCKERHUB_TOKEN (a Docker Hub access token⁠ with read/write scope). You can also trigger a rebuild manually from the Actions tab (Run workflow).

⁠Customizing

  • User: override at build time — --build-arg USERNAME=dev --build-arg USER_UID=1001
  • Extra tools: prefer features in devcontainer.json over editing the Dockerfile.

⁠License

MIT — see LICENSE⁠.

Tag summary

Content type

Image

Digest

sha256:f7c75eea8…

Size

215.6 MB

Last updated

2 days ago

docker pull peculiarengineer/ubuntu-dev