Container-Images anpassen

Die von Cloud Workstations bereitgestellten vorkonfigurierten Basis-Images enthalten nur eine minimale Umgebung mit IDE, einem einfachen Linux-Terminal, Sprach-Tools und einem sshd-Server. Um die Einrichtung der Umgebung für bestimmte Entwicklungsanwendungsfälle zu beschleunigen, können Sie benutzerdefinierte Container-Images erstellen, die diese Basis-Images erweitern, um Tools und Abhängigkeiten vorzuinstallieren und Automatisierungsskripts auszuführen.

Für benutzerdefinierte Container-Images empfehlen wir, eine Pipeline einzurichten, um diese Images automatisch neu zu erstellen, wenn das Cloud Workstations-Basis-Image aktualisiert wird. Außerdem sollten Sie ein Container-Scanning-Tool wie Artefaktanalyse ausführen, um alle zusätzlichen Abhängigkeiten zu prüfen, die Sie hinzugefügt haben. Sie sind dafür verantwortlich, benutzerdefinierte Pakete und Abhängigkeiten, die benutzerdefinierten Images hinzugefügt wurden, zu verwalten und zu aktualisieren.

Hinweis

  1. Sie benötigen einen Computer mit Tools zum Erstellen von Container-Images wie Docker und zum Übertragen von Images in die Artifact Registry mit der Google Cloud CLI. Sie können Cloud Workstations oder den Cloud Shell-Editor verwenden, um diese Schritte auszuführen. Diese Tools sind dort vorinstalliert.

  2. Wählen Sie aus unserer Liste der unterstützten Basis-Images das gewünschte Basis-Image aus, z. B. us-central1-docker.pkg.dev/cloud-workstations-images/predefined/code-oss:latest.

    Alternativ können Sie Ihr eigenes Container-Image oder externe Container-Images verwenden. Folgen Sie dazu der Anleitung unter Eigenes Container-Image verwenden.

  3. Erstellen Sie einen Ordner wie CUSTOM_IMAGE_FOLDER und ein Dockerfile in diesem Ordner, das das ausgewählte Basis-Image erweitert, wie in den folgenden Beispielen gezeigt.

Cloud Workstations-Basis-Image-Struktur

Cloud Workstations-Basis-Images haben die folgende definierte Struktur:

  • Die Einstiegspunktdatei des Basis-Images ist auf /google/scripts/entrypoint.sh festgelegt.
  • Beim Starten werden in Basis-Images Dateien unter /etc/workstation-startup.d/* in lexikografischer Reihenfolge ausgeführt, um die Workstation-Umgebung zu initialisieren.

    Die Dateien und ihr Verhalten sind wie folgt:

    • 000_configure-docker.sh: Konfiguriert und führt Docker auf der Workstation aus.
    • 010_add-user.sh: Erstellt den Standardnutzer in Cloud Workstations.

      Da die persistente Festplatte dynamisch an den Container angehängt wird, müssen Nutzer beim Start der Workstation hinzugefügt werden, nicht im Dockerfile.

    • 020_start-sshd.sh: Startet den sshd-Dienst im Container.

    • 030_customize-environment.sh: Führt /home/user/.workstation/customize_environment als user aus.

    • 110_start-$IDE.sh: Startet die IDE für das Image.

  • Cloud Workstations speichert Docker-Images im Basisverzeichnis unter /home/.docker_data, damit die Images zwischen Sitzungen erhalten bleiben.

Wenn Sie beim Starten der Workstation zusätzliche Funktionen hinzufügen möchten, fügen Sie Ihre Skripts im Verzeichnis /etc/workstation-startup.d/ hinzu:

  • Skripts in diesem Verzeichnis werden standardmäßig als Root ausgeführt. Wenn Sie die Skripts als anderer Nutzer ausführen möchten, verwenden Sie den Befehl runuser.

  • Da Skripts in lexikografischer Reihenfolge ausgeführt werden, empfehlen wir, den Skripts eine dreistellige Zahl voranzustellen, die größer als 200 ist.

Wenn Sie das Image einer Arbeitsstation nicht erweitern möchten, können Sie alternativ ein customize_environment-Skript in Ihrem Home-Verzeichnis erstellen.

Änderungen am Basisverzeichnis

Wenn in der Workstation-Konfiguration ein nichtflüchtiges Basisverzeichnis angegeben ist (Standardverhalten), wird ein nichtflüchtiger Speicher, der das Basisverzeichnis unterstützt, dynamisch zur Laufzeit an den Container angehängt. Bei diesem Prozess werden Änderungen überschrieben, die während des Erstellens des Container-Images am Verzeichnis /home vorgenommen wurden.

Wenn Sie Aktualisierungen beibehalten möchten, ändern Sie das Verzeichnis /home zur Containerlaufzeit, indem Sie ein Skript im Verzeichnis /etc/workstation-startup.d oder eine Konfiguration pro Nutzer im Verzeichnis /etc/profile.d hinzufügen. Um den Vorgang zu beschleunigen, sollten Sie das Setupscript als Hintergrundprozess ausführen (fügen Sie am Ende des Befehls ein kaufmännisches Und, &, hinzu), um zu vermeiden, dass der Containerstart blockiert wird.

Beispiele für Build-Zeit-Konfigurationen, die in die Containerlaufzeit verschoben werden sollten:

  • git-Konfiguration pro Nutzer
  • git-Repositories, die im Basisverzeichnis geklont wurden
  • Direkte Nutzerkonfiguration, z. B. durch Platzieren von Dateien in einem $HOME/.config-Verzeichnis
  • Nutzer erstellen

Nutzer erstellen und ändern

Da die persistente Festplatte zur Laufzeit dynamisch an den Container angehängt wird, müssen Nutzer beim Start der Workstation und nicht im Dockerfile hinzugefügt werden. Wenn Sie Nutzer ändern oder zusätzliche Nutzer erstellen möchten, empfehlen wir, /etc/workstation-startup.d/010_add-user.sh zu aktualisieren oder ein eigenes Skript zu erstellen, das beim Start ausgeführt wird.

Außerdem können Sie das Standard-Bash-Profil für die Nutzer ändern, indem Sie die Dateien in /etc/profile.d aktualisieren.

Vorkonfigurierte sichere APT-Schlüssel aktualisieren

Auf Cloud Workstations-Basis-Images sind eine Reihe von Tools vorinstalliert, die über Secure APT aus verschiedenen Drittanbieter-Repositories bezogen wurden. Im Rahmen der Installation werden öffentliche Schlüssel, die von den Repository-Inhabern bereitgestellt werden, mit gpg importiert und in einzelnen Dateien unter /usr/share/keyrings/ abgelegt. Auf diese Dateien wird in den entsprechenden list-Dateien unter /etc/apt/sources.list.d/ verwiesen. So kann apt die Integrität eines bestimmten Repositorys bei der Interaktion damit überprüfen.

Gelegentlich ändern Inhaber von Drittanbieter-Repositories den öffentlichen Schlüssel, der zur Validierung der Integrität ihres Repositorys verwendet wird. Dies führt dazu, dass apt bei der Interaktion mit dem Repository einen Fehler anzeigt. Um dieses potenzielle Problem zu beheben, können Sie /google/scripts/refresh-preinstalled-apt-keys.sh verwenden. Damit werden die neuesten Versionen der vorinstallierten öffentlichen Schlüssel abgerufen und neu importiert.

Sie können dieses Skript auch direkt in Ihrem benutzerdefinierten Dockerfile ausführen, bevor Sie apt-get update ausführen:

# Refresh the preinstalled APT keys
RUN /google/scripts/refresh-preinstalled-apt-keys.sh

RUN apt-get update

Installierte IDE-Versionen auflisten

Auf mehreren Cloud Workstations-Basis-Images ist eine IDE vorinstalliert. Das enthaltene /google/scripts/preinstalled-ide-versions.sh-Script listet den Namen und die Versionsinformationen der im Image installierten IDEs auf.

sudo-Root-Berechtigungen deaktivieren

Der Standardarbeitsstationsnutzer hat sudo Root-Zugriffsberechtigungen in diesen Containern. Wenn Sie den Root-Zugriff auf den Docker-Container deaktivieren möchten, setzen Sie beim Erstellen der Workstation-Konfiguration die Umgebungsvariable CLOUD_WORKSTATIONS_CONFIG_DISABLE_SUDO auf true.

So legen Sie diese Umgebungsvariable über die Google Cloud -Konsole fest, wenn Sie Ihre Workstationkonfiguration erstellen:

  1. Wenn Sie Ihre Workstationkonfiguration erstellen, füllen Sie die Konfiguration für „Grundlegende Informationen“ und „Maschinenkonfiguration“ aus.
  2. Maximieren Sie im Dialogfeld Umgebung anpassen den Abschnitt Erweiterte Containeroptionen und wählen Sie Umgebungsvariablen aus.
  3. Klicken Sie auf HinzufügenVariable hinzufügen.
  4. Geben Sie CLOUD_WORKSTATIONS_CONFIG_DISABLE_SUDO und true als Wert ein.

Anpassen ohne Bild zu erweitern

Alle Cloud Workstations-Basis-Images prüfen, ob sich unter /home/user/.workstation/customize_environment eine ausführbare Datei befindet. Falls dies der Fall ist, wird sie im Hintergrund als user ausgeführt. So können Sie beim Start beliebige Skripts oder Binärdateien ausführen. Anders als bei .profile oder .bashrc wird das Skript nur einmal beim Starten der Workstation ausgeführt und nicht für jede Shell-Anmeldung.

Da das customize_environment-Skript als user ausgeführt wird, müssen Sie die Berechtigungen beim Schreiben des Skripts entsprechend aktualisieren. Wenn Sie beispielsweise Emacs bei jedem Start Ihrer Workstation installieren möchten, könnte der Inhalt von customize_environment so aussehen:

#!/bin/bash
sudo apt-get update
sudo apt-get install -y emacs

Ausführungsprotokolle für customize_environment finden Sie im Container unter /var/log/customize_environment. Sie werden auch in die Container-Ausgabeprotokolle geschrieben. Bei erfolgreicher Ausführung von customize_environment wird eine Datei in /var/run/customize_environment_done erstellt. Da customize_environment parallel zum Start der Workstation ausgeführt wird, können die durch das Skript installierten Pakete bereits wenige Augenblicke nach dem Start der Workstation verfügbar sein.

Inaktivitätszeitüberschreitungen verhindern

Alle Cloud Workstations-Basis-Images enthalten ein vorinstalliertes Skript unter /google/scripts/keep_alive.sh. Dieses Skript sendet regelmäßig Keep-Alive-Nachrichten, die verhindern können, dass die Workstation aufgrund von Leerlauf-Timeouts heruntergefahren wird, wenn Sie Hintergrundprozesse ohne direkte Interaktion ausführen.

Inaktivitätszeitüberschreitungen mit KI-Agents verhindern

Außerdem enthalten Cloud Workstations-Basis-Images Beispielskripts für die Agent-Konfiguration unter /google/samples/agents/keepalive/. Mit diesen Beispielkonfigurationen können Sie KI-Coding-Agents (z. B. Claude Code und Antigravity CLI) auf der Workstation so konfigurieren, dass die Workstation automatisch aktiv bleibt, während die Agents Aufgaben ausführen. Wenn der Agent seine Aufgaben erledigt oder pausiert, um auf die Nutzereingabe zu warten, werden keine Keep-Alive-Nachrichten mehr gesendet. Dadurch kann es zu einem Timeout der Arbeitsstation aufgrund von Inaktivität kommen. Diese Konfigurationen funktionieren am besten, wenn die Workstationkonfiguration für die Verwendung der Workstation-Unterbrechung (idleAction auf SUSPEND gesetzt) konfiguriert ist. So kann der Speicherstatus der Workstation gespeichert und die Arbeit nahtlos fortgesetzt werden, wenn Sie zurückkehren.

Weitere Informationen zum Einrichten von agentunterstützten Workflows und Keep-Alive-Hooks finden Sie unter Für Agents optimierte Entwicklung.

Eigenes Container-Image verwenden

Sie können auch Ihr eigenes Container-Image oder externe Container-Images verwenden, sofern sie Linux-basiert sind und beim Start des Containers ein blockierender Prozess ausgeführt wird.

Beim Einrichten des Dockerfile muss mit der ENTRYPOINT-Anweisung ein blockierender Prozess wie sleep infinity ausgeführt werden, damit der Container weiter ausgeführt wird und nicht sofort beendet wird. Alternativ können Sie in der Workstationkonfiguration das Feld config.container.args festlegen, um einen blockierenden Prozess anzugeben.

Wenn Sie Ihr eigenes Container-Image verwenden, beachten Sie Folgendes:

  • Für Cloud Workstations sind keine zusätzlichen Skripts aus dem Cloud Workstations-Basis-Image erforderlich.

    Sie können sich die Skripts jedoch im Verzeichnis /etc/workstation-startup.d/ in einem Container ansehen, in dem das Cloud Workstations-Basis-Image ausgeführt wird. Die Dateinamen geben an, was die einzelnen Skripts tun.

  • Wir empfehlen, einen SSH-Server im Container auszuführen. Informationen dazu, wie Cloud Workstations dies standardmäßig einrichtet, finden Sie unter /etc/workstation-startup.d/020_start-sshd.sh im standardmäßigen Basis-Image.

  • Wir empfehlen, Ihre Standard-IDE oder Ihren Webserver auf Port 80 auszuführen.

Google Cloud bietet Standard-Basis-Images, mit denen Sie ein vollständig benutzerdefiniertes Container-Image erstellen können.

Cloud Workstations-Basis-Images erweitern

Wenn Sie ein Cloud Workstations-Basis-Image erweitern, um ein benutzerdefiniertes Image für Ihre Workstation-Umgebung zu erstellen, haben Sie drei Möglichkeiten:

  1. Aktualisieren Sie Dockerfile, um alle zusätzlichen statischen Assets hinzuzufügen, die Sie einfügen möchten.
  2. Fügen Sie unter /etc/workstation-startup.d/ zusätzliche ausführbare Dateien hinzu, um den ausgeführten Container anzupassen. Dateien in diesem Verzeichnis werden beim Start des Containers automatisch in lexikografischer Reihenfolge ausgeführt. Sie können Ihrem Dateinamen also ein Präfix voranstellen, damit er zum richtigen Zeitpunkt beim Start der Workstation ausgeführt wird.
  3. Überschreiben Sie ENTRYPOINT in Ihrem Dockerfile, um den Start Ihres Containers vollständig anzupassen.

Beispiel für benutzerdefinierte Dockerfiles

Dieser Abschnitt enthält Beispielszenarien und Anleitungen zum Erstellen eigener Dockerfiles.

Container-Image mit vorinstalliertem emacs

Führen Sie die folgenden Befehle aus, um ein Container-Image mit vorinstalliertem emacs zu erstellen:

FROM us-central1-docker.pkg.dev/cloud-workstations-images/predefined/code-oss:latest

RUN sudo apt update
RUN sudo apt install -y emacs

Container-Image mit Nutzeranpassung

So passen Sie ein Container-Image an:

  1. Erstellen Sie ein Skript in /etc/workstation-startup.d/*, das nach 010_add-user.sh ausgeführt wird, z. B. 011_customize-user.sh:

    #!/bin/bash
    # Create new group
    groupadd $GROUP
    # Add the user to a new group
    usermod -a -G $GROUP $USERNAME
    

    Ersetzen Sie