Het probleem

in VS Code zijn de nette manier om elke bijdrager aan een project een identieke omgeving te geven — hetzelfde OS, dezelfde toolversies, dezelfde shell. Maar die gelijkheid heeft een prijs: de eerste keer dat iemand het project opent, moet VS Code het container-image vanaf nul bouwen. Een OS-basislaag, een taalruntime, een shell en eventuele AI-tooling erbovenop installeren kost al gauw enkele minuten, en het gebeurt opnieuw bij elke wijziging in de Dockerfile die de cache ongeldig maakt.

Voor teams die binnen de container ook op Claude Code leunen, komt daar een tweede laag wrijving bij: authenticatie, shellgeschiedenis en npm-caches een herbouw laten overleven vraagt in elke repository om dezelfde standaard devcontainer.json.

Hoe het dat oplost

nerdy-pro-dev-container is een kant-en-klaar -Docker-image, gepubliceerd naar de GitHub . In plaats van per project een dev-container-image te bouwen, wijst een repository haar devcontainer.json naar het gepubliceerde image en haalt VS Code het rechtstreeks op — geen buildstap, geen wachten.

Het image bundelt alles wat een project op basis van Node.js nodig heeft om meteen aan de slag te gaan:

  • Ubuntu 26.04 als basis (het officiële devcontainers/base-image van Microsoft)
  • Node.js LTS, geïnstalleerd via NodeSource
  • Claude Code, globaal geïnstalleerd via npm
  • zsh met oh-my-zsh, ingesteld met de plug-ins git en fzf als standaard loginshell
  • Gangbare CLI-tools — git, curl, wget, jq, gpg, OpenSSH-client, fzf
  • sudo zonder wachtwoord voor de gebruiker vscode

Het is gebouwd voor zowel linux/amd64 als linux/arm64, dus dezelfde tag werkt op Intel- en AMD-machines én op Apple Silicon.

Behoud bij herbouw

Een container die bij elke wijziging in de Dockerfile opnieuw wordt gebouwd, is alleen handig als de staat niet meeverdwijnt. Het sjabloon koppelt vier benoemde Docker-volumes, zodat er tussen herbouwen niets verloren gaat:

  • Configuratie en sessiegegevens van Claude Code (de map .claude, via CLAUDE_CONFIG_DIR)
  • Commandogeschiedenis van zsh (HISTFILE op een blijvend volume)
  • Cache met npm-pakketten
  • SSH-known_hosts, zodat vertrouwen in een git-host niet elke keer opnieuw hoeft te worden gevestigd

Git-authenticatie stuurt de SSH-agent van de host door naar de container, en de gitconfig van de host wordt automatisch overgenomen — commits die binnen de container worden gemaakt dragen zonder handwerk de juiste auteursidentiteit.

Aan de slag

Kopieer het sjabloon naar .devcontainer/devcontainer.json:

{
  "name": "my-project",
  "image": "ghcr.io/nerdy-pro/nerdy-pro-dev-container:latest"
}

Open het project opnieuw in een dev container, en Node.js, zsh en Claude Code staan klaar zonder buildstap.

Claude Code authenticeren

Claude Code leest binnen de container een omgevingsvariabele CLAUDE_CODE_OAUTH_TOKEN in plaats van een interactieve login te doorlopen. Genereer op de host een langlevend token met:

claude setup-token

Bewaar het in het wachtwoordbeheer van de host — Keychain op macOS, de desktop-keyring (secret-tool) op Linux, of DPAPI op Windows — en stuur het via een remoteEnv-regel in devcontainer.json door naar de container, zodat het nooit binnen de container zelf getypt hoeft te worden.

De eerste git-handeling

De eerste push of fetch in een verse container vraagt in de terminal om verificatie van de hostsleutel — een eenmalige bevestiging die het SSH-vertrouwen voor die git-host vestigt, waarna het in het blijvende known_hosts-volume wordt bewaard.

Versies en releases

Images worden alleen gebouwd en gepubliceerd vanuit GitHub-releases, niet vanuit elke commit — een wijziging in de Dockerfile op main raakt niemand tot er een release wordt uitgebracht. Elke release publiceert vier tags:

TagGedrag
1.0.0Vastgezet — verandert nooit
1.0Werkt bij op patchreleases
1Werkt bij op minor- en patchreleases
latestAltijd de nieuwste stabiele release

Met die reeks kan een project op een exacte versie vastzetten voor reproduceerbaarheid, of latest volgen om automatisch bij te blijven.

Licentie

De Dockerfile, het devcontainer.json-sjabloon en de documentatie vallen onder de MIT-licentie. Alles wat boven op het basisimage is geïnstalleerd — Ubuntu, Node.js, zsh, fzf, Claude Code — houdt zijn eigen oorspronkelijke licentie.

Het is een kant-en-klaar Docker-image voor meerdere architecturen voor VS Code Dev Containers, met Node.js LTS, zsh en Claude Code, gepubliceerd naar de GitHub Container Registry als ghcr.io/nerdy-pro/nerdy-pro-dev-container. Een project wijst zijn devcontainer.json naar dat image en slaat de buildstap volledig over.
Nee. Het image is gepubliceerd naar de GitHub Container Registry en wordt rechtstreeks door VS Code opgehaald. Door devcontainer.json naar ghcr.io/nerdy-pro/nerdy-pro-dev-container:latest te wijzen sla je de buildstap volledig over.
Ubuntu 26.04, Node.js LTS, Claude Code, zsh met oh-my-zsh (plug-ins git en fzf), en gangbare CLI-tools zoals git, curl, wget, jq, gpg en een OpenSSH-client.

Draai claude setup-token op de host om een langlevend token te genereren, bewaar het in het wachtwoordbeheer van de host, en stuur het via remoteEnv in devcontainer.json door naar de container als omgevingsvariabele CLAUDE_CODE_OAUTH_TOKEN.

Ja. Vier Docker-volumes bewaren de configuratie van Claude Code, de zsh-geschiedenis, de npm-cache en SSH-known_hosts over herbouwen heen, zodat opnieuw authenticeren en opnieuw vertrouwen vestigen niet elke keer nodig zijn.
Het image is gebouwd voor zowel linux/amd64 als linux/arm64, dus dezelfde tag draait op Intel- en AMD-machines en op Apple Silicon.
Images worden alleen vanuit GitHub-releases gepubliceerd. Elke release maakt vier tags — een exacte versie als 1.0.0, een minorversie als 1.0, een majorversie als 1, en latest — zodat een project op een specifieke versie kan vastzetten of de nieuwste stabiele release kan volgen.