Blog

Codespaces anpassen

Jesse Houwing

Aktualisiert Oktober 16, 2025
13 Minuten

Wahrscheinlich haben Sie diese Situation in Ihrer Karriere schon mindestens einmal erlebt: Sie kommen in ein neues Team und brauchen mindestens 10 Tage, um den Build auf Ihrem lokalen Rechner zum Erfolg zu führen, die Tests zu bestehen, die Anwendung ohne Probleme zu starten und den Debugger zum Laufen zu bringen. Irgendwo oder im Projekt-Wiki gibt es ein Dokument mit vielen Schritten, und die letzte Person, die diesen Prozess durchlaufen hat, hat dies vor 9 Monaten getan . Situationen wie diese kosten wertvolle Zeit und sind eine große Quelle der Frustration.

Einige Unternehmen lösen dieses Problem, indem sie Sie auf einer virtuellen Maschine arbeiten lassen, entweder lokal auf Hyper-V oder per Fernzugriff in einem Rechenzentrum oder in der Cloud. Das löst einige Probleme, aber die Kosten sind oft unerschwinglich, und ich persönlich habe es noch nie gemocht, in einem entfernten Desktop zu arbeiten, oft auf einem Rechner, der mit anderen geteilt wurde, während mein eigener Desktop doppelt so viel Leistung hat.

GitHub Codespaces bietet eine Lösung für viele dieser Probleme.

Was ist Codespaces

Für die meisten Menschen ist Codespaces so etwas wie Visual Studio Code im Browser. Doch es ist viel mehr. Es ist eine Cloud-basierte Container-Plattform, auf der Entwickler ihre komplette Entwicklungsumgebung betreiben können.

Wenn Sie Codespaces von einem aktivierten Repository oder einer Organisation aus starten, wird standardmäßig eine Version von Visual Studio Code mit allen aktuellen Entwicklertools für fast alle gängigen Programmiersprachen vorinstalliert. Und Entwickler können ihren Code schreiben, ihre Tests ausführen und sogar ihre Anwendung im Browser starten und debuggen!

Und während Codespaces in der Cloud läuft, "läuft" Ihr Editor in Ihrem Browser oder in einer lokalen Instanz von Visual Studio Code.

Code Spaces werden in Azure gehostet und Visual Studio Code verwendet Remote Containers[1] für die Verbindung. Alle Änderungen, die am Dateisystem des Codespaces vorgenommen werden, werden automatisch aufgezeichnet. Selbst wenn Ihr Codespace angehalten wird, wird er genau dort fortgesetzt, wo Sie aufgehört haben.

Interessante Anwendungsfälle

In den letzten Monaten haben wir Codespaces genutzt, um interaktive Online-Workshops abzuhalten, bei denen die Teilnehmer mit neuen Technologien und Tools arbeiten konnten, die sie noch nie zuvor benutzt hatten, ohne etwas auf ihren lokalen Laptops zu installieren. Dies vereinfachte die Vorbereitungen für den Workshop erheblich und machte vorbereitete Workstations überflüssig.

Wir haben Codespaces für interne Projekte so konfiguriert, dass ein Entwickler, der einen Beitrag zum Projekt leisten möchte, lediglich den Codespace starten und ein paar Sekunden warten muss, bis der Codespace gestartet ist. Von diesem Zeitpunkt an können sie den Code ändern, die Tests ausführen und eine lokale Instanz starten, ohne dass sie irgendetwas lokal konfigurieren müssen und ohne dass ihre laufenden Projekte beeinträchtigt werden.

Ich persönlich denke darüber nach, die meisten meiner Open-Source-Projekte mit einer Codespace-Konfiguration auszustatten, damit es für andere viel einfacher wird, einen Beitrag zu leisten.

Wir planen, Codespaces für das kommende Global DevOps Bootcamp[2] zu nutzen, so dass jeder Teilnehmer unabhängig von seiner eigenen Hardware und seinen Lebensumständen Zugang zu einer schnellen und vorkonfigurierten IDE in der Cloud hat, was hoffentlich viel mehr Menschen die Teilnahme an der Veranstaltung ermöglicht.

Erste Schritte

Um mit Codespaces zu beginnen, müssen Sie nicht wissen, wie Sie Ihr eigenes Image erstellen. Es gibt eine große Liste von Starter-Containern, und auf dem Standard-Container sind Tools für fast alle gängigen Programmiersprachen vorinstalliert. Klicken Sie einfach auf die Schaltfläche "Neuer Codespace" in Ihrem Repository, um das Repository in einer neuen Instanz von Visual Studio Code in Ihrem Browser zu öffnen.

Abbildung Abbildung 1. Einen neuen Codespace erstellen

Das Standard-Image ist zwar praktisch, aber es ist auch etwas groß und enthält wahrscheinlich viele Tools, die Sie wahrscheinlich nie verwenden werden. Um eines der anderen verfügbaren Images auszuwählen, wählen Sie "Entwicklungscontainer-Konfigurationsdateien hinzufügen..." aus der Befehlspalette.

Abbildung Abbildung 2 Entwicklungscontainer-Konfigurationsdateien hinzufügen

Und wählen Sie das Container-Image, das Sie verwenden möchten. Wählen Sie im Zweifelsfall das "GitHub Codespaces (Standard)". Eine vollständige Übersicht über alle Images und die darauf installierten Komponenten finden Sie auf GitHub[3].

Abbildung Abbildung 3 Wählen Sie das zu Ihrer Umgebung passende Container-Image

Visual Studio Code fügt mehrere Dateien zu Ihrem Repository hinzu und fordert Sie dann auf, den Codespace neu zu erstellen:

Abbildung

Hinweis: Falls Sie die Aufforderung verpasst haben, können Sie den Neuaufbau jederzeit manuell über die Befehlspalette (Strg+Umschalt+P) auslösen. Dies kann auch nützlich sein, wenn Sie mehrere Änderungen vornehmen und dann den Codespace neu erstellen möchten.

Sie werden einen neuen Ordner in Ihrem Repository sehen, der diese neuen Dateien enthält: .devcontainer/devcontainer.json und .devcontainer/DockerFile. Diese Dateien werden verwendet, um die meisten Einstellungen Ihres Codespace zu speichern.

Abbildung

Anatomie eines Codespaces

Die Konfiguration Ihres Codespace wird an mehreren Stellen gespeichert. Die ersten beiden haben Sie bereits im Ordner .devcontainer gesehen. Aber es gibt noch mehr. Schauen wir uns diese an:

.devcontainer/devcontainer.json

Die devcontainer.json ist die wichtigste Konfigurationsdatei für Ihren Codespace. Sie enthält Umgebungsvariablen, Erweiterungen, Docker-Volume-Mounts und einige andere Einstellungen. Sie verweist auch auf das Container-Image, mit dem Sie Ihren Entwicklungscontainer betreiben. Standardmäßig verweist sie auf die DockerFile im gleichen Verzeichnis, aber Sie können auch auf ein beliebiges Image aus einem Docker-Repository Ihrer Wahl verweisen.

Die devcontainer.json kann auch verwendet werden, um einen der vielen Befehle auszuführen, nachdem Visual Studio Code gestartet wurde. Zu diesem Zeitpunkt wird auch der Inhalt Ihres Git-Repositorys verfügbar sein.

.devcontainer/DockerFile

Die DockerFile wird verwendet, um das Basis-Image auszuwählen und um optional zusätzliche Tools in Ihrem Container zu installieren. Standardmäßig ist es ein einfacher Verweis auf das Image, das Sie ausgewählt haben, als Sie Visual Studio Code die Konfigurationsdateien für den Entwicklungscontainer zu Ihrem Repository hinzufügen ließen.

Ihr GitHub-Profil

Zusätzliche Einstellungen wie Themen, Tastaturbelegungen, Snippets und global installierte Erweiterungen können mit Ihrem GitHub-Profil in Ihrem Codespace synchronisiert werden, indem Sie Settings Sync[4] aktivieren.

Abbildung

Codespaces fragt, welche Einstellungen synchronisiert werden sollen und was zu tun ist, wenn es widersprüchliche Einstellungen gibt:

Abbildung

Einige Anpassungen, wie z.B. Tastaturbelegungen, können nur über Settings Sync oder über Visual Studio Code-Erweiterungen konfiguriert werden.

Ihr dotfiles-Repository

In Ihren persönlichen GitHub-Einstellungen können Sie ein Repository mit Ihren Linux-Dotfiles[5] konfigurieren. Mit diesen können Sie Ihre Standard-Shell, Ihren bevorzugten Editor und viele andere Einstellungen Ihres Linux-Benutzerprofils konfigurieren.

Abbildung

Codespaces Geheimnisse

Möglicherweise müssen Sie von Ihrem Codespace aus auf andere Ressourcen zugreifen, z. B. auf eine GitHub Container Registry, Cloud-Ressourcen usw. Um zu verhindern, dass diese Geheimnisse versehentlich in Ihr Repository übertragen werden, empfiehlt es sich, diese Anmeldeinformationen nicht im Dateisystem zu speichern. Speichern Sie sie stattdessen in Codespaces Secrets. Wenn ein Codespace gestartet wird, werden seine Geheimnisse als Umgebungsvariablen verfügbar gemacht.

Geheimnisse können auf mehreren Ebenen gespeichert werden:

  • Repository (am spezifischsten)
  • Benutzereinstellungen
  • Organisationseinstellungen (am wenigsten spezifisch)

Die spezifischste Ebene wird von Ihrem Codespace verwendet.

Hinweis: Wann immer ein Geheimnis aktualisiert wird, müssen Sie Ihren Codespace neu erstellen, damit die Änderungen wirksam werden. Leider gibt es in Ihrem Codespace keinen Hinweis darauf, dass dies erforderlich ist.

Hinweis: Sie können keine Geheimnisse mit einem Schlüssel speichern, der mit GITHUB_ beginnt. Das ist bedauerlich, da einige Tools dies erwarten. In diesem Fall müssen Sie den Wert von einem anderen Namen in den reservierten Namen kopieren, nachdem der Codespace gestartet wurde.

Es gibt spezielle Geheimnisse, die den Zugriff auf private Docker-Repositories ermöglichen[6]. Diese müssen benannt werden:

  • ***_CONTAINER_REGISTRY_PASSWORD
  • ***_CONTAINER_REGISTRY_SERVER
  • ***_CONTAINER_REGISTRIERUNG_BENUTZERNAME

Wobei *** ein benutzerdefiniertes Etikett zur Identifizierung der Containerregistrierung ist.

Allgemeine Szenarien

Der häufigste Grund für die Anpassung Ihres Codespace ist wahrscheinlich die Notwendigkeit, zusätzliche Tools zu installieren, die für Ihren Entwicklungsprozess erforderlich sind, oder die Änderung der installierten Erweiterungen. Jedes Mal, wenn Sie Änderungen vornehmen, können Sie diese sofort testen, indem Sie Ihren Codespace neu aufbauen. Wenn Sie mit Ihren Änderungen zufrieden sind, übertragen Sie diese in das Repository, um sie zu erhalten und mit der Welt zu teilen.

Installieren zusätzlicher Tools

Während im Standard-Container von Codespace bereits viele Dinge installiert sind, müssen Sie vielleicht noch etwas hinzufügen. Entweder ein benutzerdefiniertes Tool oder etwas, für dessen Ausführung eine Lizenz erforderlich ist.

Sie können diese hinzufügen, indem Sie die DockerFile im Ordner .devcontainer bearbeiten.


FROM mcr.microsoft.com/vscode/devcontainers/universal:1-focal

USER root
RUN apt-get update

USER Codespace
RUN az extension add --name azure-devops

Sie können Befehle auf der Containerebene (USER root) oder auf der Benutzerebene (USER Codespace) ausführen.

Hinzufügen von Erweiterungen

Die Liste der zu installierenden Erweiterungen wird in der Datei .devcontainer.json gespeichert. Sie können der Liste manuell Erweiterungen hinzufügen und dann Ihren Codespace neu erstellen.

Abbildung Abbildung 4 Manuelles Hinzufügen einer Erweiterung zur devcontainer.json

Aber es gibt einen einfacheren Weg, dies zu erreichen. Wenn Sie sich in Ihrem Codespace befinden, können Sie die Erweiterung über den Marktplatz für Erweiterungen hinzufügen:

Abbildung Abbildung 5 Hinzufügen einer Erweiterung über den Erweiterungsmarktplatz

Suchen Sie die gewünschte Erweiterung und fügen Sie sie über das Zahnradmenü zur .devcontainer.json hinzu.

Caching von Containern innerhalb des Codespace

Einer der großen Vorteile von Codespaces ist, dass Sie mit einem Klick auf eine Schaltfläche schnell mit einem Projekt beginnen können. Sobald der Codespace gestartet ist, können Sie zusätzliche Bilder abrufen, die dann lokal zwischengespeichert werden:


{

"postCreateCommand": "docker pull ghcr.io/jessehouwing/mycustom-cli:latest && ... "

}

Um das Image aus einem privaten Repository zu beziehen, fügen Sie die bereits erwähnten ***_CONTAINER_REGISTRY-Geheimnisse hinzu.

Speichern des Codespace-Containers in der GitHub Container Registry

Es ist vielleicht nicht wünschenswert, Ihren Container bei jedem Start von Grund auf neu zu erstellen und Sie möchten den Container nicht an einem öffentlich zugänglichen Ort speichern. In diesem Fall können Sie Ihren Container in der GitHub Container Registry speichern und Codespaces Zugriff gewähren.

Erstellen und markieren Sie zunächst Ihr Container-Image:


> docker build .
[+] Building 0.2s (6/6) FINISHED
=> [internal] load build definition from Dockerfile                                                               0.1s
=> => transferring dockerfile: 162B                                                                               0.0s
=> [internal] load .dockerignore                                                                                  0.1s
=> => transferring context: 2B                                                                                    0.0s
=> [internal] load metadata for mcr.microsoft.com/vscode/devcontainers/universal:1-linux                          0.0s
=> [1/2] FROM mcr.microsoft.com/vscode/devcontainers/universal:1-linux                                            0.0s
=> CACHED [2/2] RUN az extension add --name azure-devops                                                          0.0s
=> exporting to image                                                                                             0.1s
=> => exporting layers                                                                                            0.0s
=> => writing image sha256:aa1d12f58610a60d4ee53b7dfc06b2b5a9581f5e26de19931deb61c3b66b120f                       0.0s

Markieren und veröffentlichen Sie das Bild in GitHub Container Registry:


> docker tag aa1d12f58610a60d4ee53b7dfc06b2b5a9581f5e26de19931deb61c3b66b120f ghcr.io/jessehouwing/Codespaces-demo:latest
> docker push ghcr.io/jessehouwing/Codespaces-demo:latest
The push refers to repository [ghcr.io/jessehouwing/Codespaces-demo]
……
latest: digest: sha256:d928fbe90f267882d4d4de4194015eef06f5c88a045f3d9d4334aae0ea104612 size: 4538

Navigieren Sie dann zu den Paketeinstellungen für das Container-Image, das Sie soeben verschoben haben, und gewähren Sie den Zugriff auf GitHub Codespaces:

Abbildung Abbildung 6 Suchen Sie den neu veröffentlichten Codespace-Container und öffnen Sie die Paketeinstellungen

Gewähren Sie dem Repository, von dem aus Sie dieses Codespace-Image starten möchten, Zugriff auf dieses Paket:

Abbildung Abbildung 7 Codespace-Zugang verwalten, um das Repository hinzuzufügen

Aktualisieren Sie nun die DockerDatei im Repository, um dieses Image zu verwenden:


FROM ghcr.io/jessehouwing/Codespaces-demo:latest

Und bauen Sie Ihren Codespace neu auf.

Über die Erweiterung des Basisbildes hinaus

Ihre Anforderungen an das Codespace-Image können über die Standard-Images hinausgehen. Vielleicht benötigen Sie eine andere Linux-Distribution, Standardbibliotheken, eine bestimmte Kernel-Version usw. In diesem Fall können Sie auch einen Codespace von Grund auf neu erstellen. Ein guter Einstiegspunkt könnte der Standardcontainer von Codespaces[7] sein, den Sie entweder wiederverwenden oder als Inspiration für Ihr eigenes Image verwenden können.

Um mit der Anpassung des Images zu beginnen, kopieren Sie den Inhalt des Ordners .devcontainer eines der Standard-Images und ersetzen die DockerFile durch die base.DockerFile. Im Ordner library-scripts finden Sie alle Skripte, die für die Installation der verschiedenen Toolsets verwendet werden.

Übertragen Sie entweder den Ordner .devcontainer und seinen Inhalt direkt in Ihr Repository oder erstellen Sie den Container und veröffentlichen Sie ihn wie oben beschrieben in einer Container-Registry.

Abbildung Abbildung 8 Nehmen Sie den gesamten Inhalt eines Codespace-Bildes, um es noch weiter anzupassen

Wie CodeSpaces die Arbeitsweise von Entwicklern verändern wird

Heutzutage ist es schwer, anständige Laptops und andere Hardware zu finden. Der Mangel an verfügbaren Chips macht es nicht einfacher, an geeignete Hardware zu kommen. Selbst wenn Sie die Hardware haben, kann es mühsam sein, neue Teammitglieder einzubinden, ganz zu schweigen von den externen Beratern, die ihre eigenen Geräte mitbringen. Was wäre, wenn es für all dies eine Lösung gäbe? Es gibt eine, und sie heißt GitHub CodeSpaces. Mit GitHub CodeSpaces läuft Ihr Editor in einem Browser. Sie müssen nicht alle paar Jahre teure Hardware kaufen, um die neuesten Entwickler-Tools auszuführen. Schon ein ultraleichter Laptop oder ein Tablet reicht aus, um auf CodeSpaces zuzugreifen.

CodeSpaces verwendet Docker-Images, um Open-Source-Tools wie VScode auszuführen. Diese Standard-Images enthalten die meisten der gängigen Compiler und Tools, die Sie benötigen. "Aber ich brauche dieses ganz spezielle Tool für mein Projekt". Glücklicherweise können Sie Ihre eigenen CodeSpaces-Images erstellen und nach Herzenslust Ihre eigenen Tools hinzufügen. Sie können mit einem Standard-Image beginnen und Ihre Entwickler ihre Erweiterungen hinzufügen lassen. Das ist das Beste aus beiden Welten: Sie haben die Kontrolle und können schnell ein neues Image erstellen, und der Entwickler kann es bei Bedarf weiter anpassen.

Es gibt einen weiteren Vorteil für CodeSpaces. Bei einem durchschnittlichen Entwicklungslaptop befindet sich der Quellcode auf dem Laptop und reist mit Ihrem Entwickler, wohin er auch geht. Es ist vielleicht nicht die neueste Version, aber immerhin. Mit CodeSpaces muss sich Ihr Code nicht auf dem Laptop befinden, er bleibt auf GitHub. Das macht CodeSpaces sicherer.

GitHub CodeSpaces wird das nächste große Ding bei den Entwicklungswerkzeugen sein und die Art und Weise, wie wir als Entwickler arbeiten, verändern.

Zusammenfassung

Codespaces ermöglicht es Teams weltweit, zu GitHub beizutragen. Es verkürzt die Zeit, die jeder braucht, um ein Projekt zu öffnen und seine Änderungen beizutragen, drastisch.

Selbst wenn die Standardoptionen Ihren Anforderungen nicht genügen, können Sie die installierten Komponenten einfach erweitern und ändern. Updates können mühelos an Ihr Team verteilt werden.

Haben Sie eine Leidenschaft für DevOps?

Bei Xpirit leben und atmen wir DevOps. Seit unserer Gründung ist DevOps das Herzstück unserer Organisation und das geht über die Tools hinaus. Aber auch Tools helfen Ihnen, eine großartige Entwicklungskultur aufzubauen, und die Tools, die wir lieben und unterstützen, sind Azure DevOps und GitHub. GitHub steht an der Spitze von Open Source und wird von vielen Unternehmen übernommen. Seit Microsoft GitHub übernommen hat, sind wir der erste GitHub Verified Partner in Europa! Unser Team von DevOps-Experten hat auch mehrere GitHub Akkreditierungen, um als Teil des erweiterten GitHub-Technologieservice-Teams Dienstleistungen und Schulungen anzubieten! Wir schulen sogar Microsoft-Mitarbeiter in der Nutzung von GitHub!

Klingt es nach Spaß, Teil dieses Teams zu sein? Möchten Sie in einem Umfeld arbeiten, das Sie dazu anspornt, jeden Tag mehr zu lernen? Möchten Sie Teil dieses Teams von DevOps-Experten werden? Mögen Sie komplexe Probleme, wollen Sie herausgefordert werden und ein unterstützendes Team von Kollegen haben, das Ihnen hilft, Ihre Fähigkeiten zu verbessern? Lassen Sie uns ein Gespräch führen und herausfinden, ob Xpirit Sie auf Ihrer Karrierereise unterstützen und epische Aufgaben bei unseren Weltklasse-Kunden übernehmen kann. Wir lieben es, die Möglichkeiten gemeinsam zu erkunden. Lassen Sie uns eine Tasse Kaffee oder Tee trinken und über Ihre Zukunft sprechen. Wenn Sie keinen Kaffee oder Tee mögen, ist es vielleicht noch besser: Lassen Sie uns ein Bier trinken! Der erste Schritt zu Ihrem Traumjob besteht darin, aktiv zu werden, !

[1] Entwickeln innerhalb eines Containers mit Visual Studio Code Remote Development

[2] globaldevopsbootcamp.com/

[3] vscode-dev-containers/containers bei main - microsoft/vscode-dev-containers - GitHub

[4] Einstellungen Sync

[5] dotfiles

[6] Erlauben Sie Ihrem Codespace den Zugriff auf eine private Registry

[7] .devcontainer

Verfasst von

Jesse Houwing

Jesse is a passionate trainer and coach, helping teams improve their productivity and quality all while trying to keep work fun. He is a Professional Scrum Trainer (PST) through Scrum.org, Microsoft Certified Trainer and GitHub Accredited Trainer. Jesse regularly blogs and you'll find him on StackOverflow, he has received the Microsoft Community Contributor Award three years in a row and has been awarded the Microsoft Most Valuable Professional award since 2015. He loves espresso and dark chocolate, travels a lot and takes photos everywhere he goes.

Contact

Let’s discuss how we can support your journey.