Container-Images anpassen

Die von Cloud Workstations bereitgestellten vorkonfigurierten Basis-Images enthalten nur eine minimale Umgebung mit IDE, einfachen Linux-Terminal- und Sprachtools sowie einem sshd-Server. Wenn Sie die Umgebungseinrichtung für bestimmte Anwendungsfälle bei der Entwicklung beschleunigen möchten, können Sie benutzerdefinierte Container-Images erstellen, die diese Basis-Images so erweitern, dass Tools und Abhängigkeiten vorinstalliert und Automatisierungsskripts ausgeführt werden.

Für benutzerdefinierte Container-Images empfehlen wir, eine Pipeline einzurichten, die diese Images automatisch neu erstellt, wenn das Cloud Workstations-Basis-Image aktualisiert wird. Außerdem sollten Sie ein Tool zum Scannen von Containern wie Artefakteanalyse ausführen, um alle hinzugefügten Abhängigkeiten zu prüfen. Sie sind für die Verwaltung und Aktualisierung von benutzerdefinierten Paketen und Abhängigkeiten, die benutzerdefinierten Images hinzugefügt wurden, verantwortlich.

Hinweise

  1. Sie benötigen eine Maschine mit Tools, um Container-Images wie Docker zu erstellen und Images über die Google Cloud CLI in Artifact Registry (oder Container Registry) zu übertragen. Sie können Cloud Workstations oder den Cloud Shell-Editor verwenden, um diese Schritte auszuführen, bei denen diese Tools vorinstalliert sind.

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

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

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

Struktur des Basis-Images von Cloud Workstations

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

  • Die Einstiegspunktdatei für das Basis-Image ist auf /google/scripts/entrypoint.sh festgelegt.
  • Beim Start führen Basis-Images Dateien unter /etc/workstation-startup.d/* in lexikografischer Reihenfolge aus, um die Workstationumgebung zu initialisieren.

    Die Dateien und ihr Verhalten sehen so aus:

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

      Da der nichtflüchtige Speicher dynamisch an den Container angehängt wird, müssen Nutzer beim Start der Workstation und nicht im Dockerfile hinzugefügt werden.

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

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

  • Cloud Workstations speichert Docker-Images im Basisverzeichnis unter /home/.docker_data, sodass die Images zwischen Sitzungen beibehalten werden.

Wenn Sie beim Start 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. Verwenden Sie den Befehl runuser, um die Skripts als ein anderer Nutzer auszuführen.

  • Da Skripts in lexikografischer Reihenfolge ausgeführt werden, sollten Sie ihnen eine dreistellige Zahl voranstellen, die größer als 200 ist.

Änderungen am Basisverzeichnis

Wenn in der Workstationkonfiguration ein nichtflüchtiges Basisverzeichnis angegeben ist (dies ist das Standardverhalten), wird zur Laufzeit dynamisch ein nichtflüchtiger Speicher, der das Basisverzeichnis speichert, an den Container angehängt. Bei diesem Vorgang werden Änderungen überschrieben, die zum Zeitpunkt des Container-Images am Verzeichnis /home vorgenommen wurden.

Ändern Sie das Verzeichnis /home zur Containerlaufzeit, um die Aktualisierungen beizubehalten. Fügen Sie dazu im Verzeichnis /etc/workstation-startup.d ein Skript hinzu oder fügen Sie eine nutzerspezifische Konfiguration im Verzeichnis /etc/profile.d hinzu. Sie können den Prozess beschleunigen, indem Sie das Setup-Skript als Hintergrundprozess ausführen. Fügen Sie dazu am Ende des Befehls ein kaufmännisches Und-Zeichen (&) hinzu, um den Start des Containers zu vermeiden.

Einige Beispiele für die Konfiguration der Build-Zeit, die in die Containerlaufzeit verschoben werden sollte:

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

Nutzer erstellen und ändern

Da der nichtflüchtige Speicher 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 weitere Nutzer ändern oder erstellen möchten, sollten Sie /etc/workstation-startup.d/010_add-user.sh aktualisieren oder ein eigenes Skript erstellen, das beim Start ausgeführt wird.

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

Vorkonfigurierte sichere APT-Schlüssel aktualisieren

In Cloud Workstations-Basis-Images sind eine Reihe von Tools vorinstalliert, die über Secure APT aus verschiedenen Drittanbieter-Repositories abgerufen wurden. Im Rahmen des Installationsvorgangs werden die von den Repository-Inhabern bereitgestellten öffentlichen Schlüssel mit gpg importiert und in einzelne Dateien unter /usr/share/keyrings/ platziert. Auf diese Dateien wird in den entsprechenden list-Dateien unter /etc/apt/sources.list.d/ verwiesen. Dadurch kann apt die Integrität eines bestimmten Repositorys bei der Interaktion mit diesem prüfen.

Gelegentlich können Inhaber von Drittanbieter-Repositories den öffentlichen Schlüssel ändern, mit dem die Integrität ihres Repositorys validiert wird. Dies führt dazu, dass apt bei der Interaktion mit dem Repository einen Fehler anzeigt. Zum Beheben dieses potenziellen Problems können Sie /google/scripts/refresh-preinstalled-apt-keys.sh verwenden. Damit werden die neuesten Versionen vorinstallierter öffentlicher Schlüssel abgerufen und noch einmal importiert.

Installierte IDE-Versionen auflisten

Auf mehreren Cloud Workstations-Basis-Images ist eine IDE vorinstalliert. Zur Vereinfachung können Sie sich das enthaltene /google/scripts/preinstalled-ide-versions.sh-Skript ansehen, das die Namen und Versionsinformationen der im Image installierten IDEs enthält.

Root-Berechtigungen von sudo deaktivieren

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

So legen Sie diese Umgebungsvariable über die Google Cloud Console beim Erstellen der Workstationkonfiguration fest:

  1. Schließen Sie beim Erstellen der Workstationkonfiguration die Konfiguration für „Allgemeine Informationen“ und die Maschinenkonfiguration ab.
  2. Maximieren Sie im Dialogfeld Umgebungsanpassung den Bereich Erweiterte Containeroptionen und wählen Sie Umgebungsvariablen aus.
  3. Klicken Sie auf addVariable hinzufügen.
  4. Geben Sie CLOUD_WORKSTATIONS_CONFIG_DISABLE_SUDO und true als Wert ein.

Eigenes Container-Image verwenden

Sie können auch ein eigenes Container-Image oder externe Container-Images verwenden, sofern diese Linux-basiert sind und beim Start des Containers einen blockierenden Prozess ausführen.

Beim Einrichten des Dockerfile muss die Anweisung ENTRYPOINT einen Blockierprozess wie sleep infinity ausführen, damit der Container weiter ausgeführt wird, anstatt den Container sofort zu beenden. Alternativ können Sie in der Workstationkonfiguration das Feld config.container.args festlegen, um einen Blockierprozess anzugeben.

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

  • Cloud Workstations erfordert keine zusätzlichen Skripts aus dem Basis-Image von Cloud Workstations.

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

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

  • Wir empfehlen, dass du deine Standard-IDE oder deinen Webserver auf Port 80 ausführst.

Cloud Workstations-Basis-Images erweitern

Wenn Sie ein Cloud Workstations-Basis-Image erweitern, um ein benutzerdefiniertes Image für Ihre Workstationumgebung zu erstellen, können Sie drei Ansätze verfolgen:

  1. Fügen Sie in Dockerfile weitere statische Assets hinzu, die Sie hinzufügen möchten.
  2. Fügen Sie unter /etc/workstation-startup.d/ weitere ausführbare Dateien hinzu, um den ausgeführten Container anzupassen. Dateien in diesem Verzeichnis werden beim Containerstart automatisch in lexikografischer Reihenfolge ausgeführt. Sie können also dem Dateinamen ein Präfix voranstellen, damit die Datei während des Starts der Workstation zur richtigen Zeit ausgeführt wird.
  3. Überschreiben Sie ENTRYPOINT in Ihrem Dockerfile, um den Containerstart vollständig anzupassen.

Beispiele 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 in /etc/workstation-startup.d/* ein Skript, 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 $GROUP durch den neuen Gruppennamen und $USERNAME durch den Nutzernamen des Nutzers.

  2. Wenn Sie das Skript 011_customize-user.sh genannt haben, fügen Sie dem Image in Ihrem Dockerfile Folgendes hinzu und machen es ausführbar:

    FROM us-central1-docker.pkg.dev/cloud-workstations-images/predefined/code-oss:latest
    
    COPY 011_customize-user.sh /etc/workstation-startup.d/
    
    RUN chmod +x /etc/workstation-startup.d/011_customize-user.sh
    

Container-Image, das Container-Umgebungsvariablen in SSH-Sitzungen festlegt

Auf Workstationkonfigurations- oder Workstationebene festgelegte Umgebungsvariablen werden mit dem Befehl „entrypoint“ an direkte Unterprozesse übergeben. Dies schließt die IDE in den vorkonfigurierten Basis-Images ein. SSH-Sitzungen sind jedoch keine untergeordneten Prozesse des Einstiegspunkts und daher wurden diese benutzerdefinierten Umgebungsvariablen nicht festgelegt.

Zum Festlegen dieser Umgebungsvariablen in den SSH-Sitzungen richten Sie ein benutzerdefiniertes Container-Image ein, das diese Umgebungsvariablen vom Einstiegspunktbefehl des Containers an die Datei /etc/environment weiterleitet.

Gehen Sie dazu folgendermaßen vor:

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

    #!/bin/bash
    #
    echo "CUSTOM_ENV_VAR=$CUSTOM_ENV_VAR" >> /etc/environment
    

    Ersetzen Sie CUSTOM_ENV_VAR durch den gewünschten Namen der Umgebungsvariablen.

  2. Wenn Sie das Skript 011_add-ssh-env-variables.sh genannt haben, fügen Sie dem Image in Ihrem Dockerfile Folgendes hinzu und machen es ausführbar:

    FROM us-central1-docker.pkg.dev/cloud-workstations-images/predefined/code-oss:latest
    
    COPY 011_add-ssh-env-variables.sh /etc/workstation-startup.d/
    
    RUN chmod +x /etc/workstation-startup.d/011_add-ssh-env-variables.sh
    

Container-Image, das die X11-Weiterleitung für SSH-Sitzungen aktiviert

Mit der X11-Weiterleitung können Sie Remote-Anwendungen starten und die Anwendungsanzeige an einen lokalen Computer weiterleiten.

Um ein Container-Image zu erstellen, das die X11-Weiterleitung aktiviert, ändern Sie die OpenSSH-Daemon-Konfigurationsdatei (/etc/ssh/sshd_config), die von den Cloud Workstations-Basis-Images bereitgestellt wird. Fügen Sie dazu X11Forwarding yes (um die X11-Weiterleitung zuzulassen) und AddressFamily inet an (damit nur IPv4 verwendet wird). Weitere Informationen zu diesen Suchbegriffen finden Sie auf den OpenBSD-Webseiten zu AddressFamily und X11Forwarding.

Hier sehen Sie ein Beispiel-Dockerfile, das die erforderlichen Änderungen vornimmt:

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

# Permit X11 forwarding using only IPv4
RUN cat >> /etc/ssh/sshd_config <<-EOF

AddressFamily inet
X11Forwarding yes
EOF

Code OSS for Cloud Workstations in ein anderes Container-Image kopieren

Bei einem mehrstufigen Build können Sie mehrere FROM-Anweisungen im Dockerfile verwenden. Jeder FROM-Befehl kann eine andere Basis verwenden und ermöglicht das Kopieren von Artefakten zwischen Build-Phasen. Wenn Sie Code OSS for Cloud Workstations einem anderen Container-Image hinzufügen möchten, verwenden Sie einen mehrstufigen Build, um den Anwendungsordner /opt/code-oss in Ihr Image zu kopieren. Wenn Sie Code OSS für Cloud Workstations zum Containerstart starten möchten, kopieren Sie zusätzlich das Skript /etc/workstation-startup.d/110_start-code-oss.sh in Ihren Container.

Hier sehen Sie ein Beispiel-Dockerfile, mit dem Code OSS in das IntelliJ Ultimate-Image von JetBrains kopiert wird. Anschließend können Sie mit beiden IDEs interagieren:

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

FROM us-central1-docker.pkg.dev/cloud-workstations-images/predefined/jetbrains-intellij:latest

# Copy Code OSS for Cloud Workstations and startup scripts into our custom image
COPY --from=code-oss-image /opt/code-oss /opt/code-oss
COPY --from=code-oss-image /etc/workstation-startup.d/110_start-code-oss.sh /etc/workstation-startup.d/110_start-code-oss.sh

# Use the existing entrypoint script which will execute all scripts in /etc/workstation-startup.d/
ENTRYPOINT ["/google/scripts/entrypoint.sh"]

Container-Image, das IDE-Erweiterungen in Code OSS für Cloud Workstations für die Java-Entwicklung vorinstalliert

Führen Sie die folgenden Befehle aus, um ein Container-Image zu erstellen, mit dem IDE-Erweiterungen in der Code OSS for Cloud Workstations for Java-Entwicklung zum Build-Zeitpunkt vorinstalliert werden:

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

RUN wget https://open-vsx.org/api/vscjava/vscode-java-debug/0.40.1/file/vscjava.vscode-java-debug-0.40.1.vsix && \
unzip vscjava.vscode-java-debug-0.40.1.vsix "extension/*" &&\
mv extension /opt/code-oss/extensions/java-debug

RUN wget https://open-vsx.org/api/vscjava/vscode-java-dependency/0.19.1/file/vscjava.vscode-java-dependency-0.19.1.vsix && \
unzip vscjava.vscode-java-dependency-0.19.1.vsix "extension/*" &&\
mv extension /opt/code-oss/extensions/java-dependency

RUN wget https://open-vsx.org/api/redhat/java/1.6.0/file/redhat.java-1.6.0.vsix && \
unzip redhat.java-1.6.0.vsix "extension/*" &&\
mv extension /opt/code-oss/extensions/redhat-java

RUN wget https://open-vsx.org/api/vscjava/vscode-maven/0.35.2/file/vscjava.vscode-maven-0.35.2.vsix && \
unzip vscjava.vscode-maven-0.35.2.vsix "extension/*" &&\
mv extension /opt/code-oss/extensions/java-maven

RUN wget https://open-vsx.org/api/vscjava/vscode-java-test/0.35.0/file/vscjava.vscode-java-test-0.35.0.vsix && \
unzip vscjava.vscode-java-test-0.35.0.vsix "extension/*" &&\
mv extension /opt/code-oss/extensions/java-test

Vorinstallierte Erweiterungen werden als integrierte Erweiterungen betrachtet. Sie können diese Erweiterungen dann nicht aktualisieren und sie werden möglicherweise nicht im Bereich „Installiert“ im Extensions Marketplace angezeigt. Sie finden Ihre integrierten Erweiterungen jedoch, indem Sie nach @builtin suchen.

Eine weitere Möglichkeit, Erweiterungen beim Start zu installieren, ist die Ausführung eines Startskripts. Fügen Sie beispielsweise das folgende Startskript unter /etc/workstation-startup.d/120_install_extensions.sh ein:

/opt/code-oss/bin/codeoss-cloudworkstations --install-extension vscjava.vscode-java-debug@0.40.1 \
--install-extension vscjava.vscode-java-dependency@0.19.1  \
--install-extension redhat.java@1.6.0 \
--install-extension vscjava.vscode-maven@0.35.2 \
--install-extension vscjava.vscode-java-test@0.35.0

Mit dieser Methode wird die Erweiterung in im Extensions Marketplace angezeigt und kann von dort aus aktualisiert werden.

JetBrains-IDEs und -Plug-ins in Basis-Images installieren

Wenn Sie Docker-Images für Workstationkonfigurationen anpassen, können Sie JetBrains-IDEs und -Plug-ins wie Cloud Code for IntelliJ im Basis-Image installieren. Cloud Workstations-Basis-Images für JetBrains-Produkte enthalten die folgenden Skripts zur Unterstützung:

  • jetbrains-installer.sh: JetBrains-IDEs installieren
  • plugin-installer.sh: Plug-ins wie Cloud Code for IntelliJ installieren

Verwenden Sie diese Skripts nach Bedarf, um das Basis-Image anzupassen, sie mit einem Startskript aufzurufen oder nach dem Start der Workstation auszuführen.

Installationsskripts

Wenn Sie die Quelldateien für die Skripts jetbrains-installer.sh und plugin-installer.sh aufrufen möchten, starten Sie eine Workstation mit einer Workstationkonfiguration, die eines der vordefinierten Images von JetBrains verwendet. Stellen Sie dann eine Verbindung zur Workstation entweder über JetBrains Gateway oder über SSH her und durchsuchen Sie dann die Skriptdateien im Verzeichnis installer-scripts, das sich im Stammverzeichnis befindet.

Wir empfehlen, diese Skripts zum Zeitpunkt des Container-Builds auszuführen. Vermeiden Sie die Ausführung auf einer bereits gestarteten Workstation.

Plug-in-Installationsskript verwenden

Das Skript plugin-installer.sh verwendet die folgende Syntax:

plugin-installer.sh [-v VERSION] [-d DESTINATION-DIRECTORY] [-c CHECKSUM] [-f] PLUGIN_ID

Ersetzen Sie Folgendes:

  • VERSION: optionale Versionsnummer des zu installierenden Plug-ins.
  • DESTINATION-DIRECTORY: optionales Verzeichnis, in dem das Plug-in installiert werden soll. Wenn kein Wert angegeben ist, wird das Arbeitsverzeichnis verwendet.
  • CHECKSUM: Optionale SHA-256-Prüfsumme des angeforderten Plug-ins.
  • -f: Falls angegeben, werden vorhandene Plug-ins überschrieben.
  • PLUGIN_ID: die erforderliche numerische Plug-in-ID vom JetBrains Marketplace. Um beispielsweise Dart hinzuzufügen, verwenden Sie 6351 als PLUGIN_ID. Wenn Sie Cloud Code for IntelliJ hinzufügen möchten, verwenden Sie 8079 als PLUGIN_ID.

Führen Sie beispielsweise den folgenden Befehl aus, um die neueste Version des Dart-Plug-ins in IntelliJ zu installieren:

plugin-installer.sh -d /opt/ideaIU/plugins/ 6351

JetBrains-Installationsskript verwenden

Es wird empfohlen, das JetBrains-Installationsskript zu verwenden, wenn Sie ein vorkonfiguriertes Basis-Image für JetBrains-IDEs erweitern.

Das Skript jetbrains-installer.sh verwendet die folgende Syntax:

jetbrains-installer.sh IDE [ pinned|latest ]

Ersetzen Sie Folgendes:

  • IDE: zu installierende JetBrains-IDE Sie müssen eine der folgenden IDE-Abkürzungen verwenden:

    IDE Produkt installiert
    cl CLion
    clion CLion
    go GoLand
    goland GoLand
    iiu Intellij Ultimate
    intellij Intellij Ultimate
    pcp PyCharm Professional
    pycharm PyCharm Professional
    ps PHPStorm
    phpstorm PHPStorm
    rd Rider
    rider Rider
    rm RubyMine
    rubymine RubyMine
    ws WebStorm
    webstorm WebStorm
  • pinned|latest: Optional. Verwenden Sie entweder die angepinnte oder die neueste Version der IDE. Die Standardeinstellung ist latest.

Führen Sie beispielsweise den folgenden Befehl aus, um die neueste Version der Clion-Anwendung zu installieren:

jetbrains-installer.sh clion

JetBrains-IDE-Konfigurationsdateien anpassen

Wenn in der Workstationkonfiguration ein nichtflüchtiges Basisverzeichnis angegeben ist, speichern die Cloud Workstations-Basis-Images mit JetBrains-IDEs die Konfigurationsdateien $IDE.vmoptions und $IDE.properties automatisch. Wenn Sie den Standardspeicherort dieser Dateien überschreiben möchten, geben Sie die Umgebungsvariable CLOUD_WORKSTATIONS_JETBRAINS_PERISTED_CONFIG_DIR an.

Weitere Informationen finden Sie unter /etc/workstation-startup.d/120_persist-jetbrains-configs.sh in allen JetBrains-Basis-Images, um zu erfahren, wie Cloud Workstations dies standardmäßig einrichtet.

Basis-Docker-Image mit Cloud Code for IntelliJ erweitern

Das folgende Dockerfile-Snippet erweitert ein Basis-Docker-Image mit Cloud Code for IntelliJ. Dazu wird 8079 als erforderliche Plug-in-ID eingefügt. Im Beispiel werden optional auch version 22.9.3-222 als Versionsnummer, /opt/ideaIU/plugins/ als Zielverzeichnis und 89628279ed9042c526a81facc09bf53f8fb8b83b4595b0d329d94c1611e0c379 als Prüfsumme angegeben:

...
# Install IDE and Plugins
RUN bash /installer-scripts/jetbrains-installer.sh intellij pinned && \
  # Install Cloud Code - https://plugins.jetbrains.com/plugin/8079-cloud-code
  bash /installer-scripts/plugin-installer.sh \
      -v 22.9.3-222 \
      -d /opt/ideaIU/plugins/ \
      -c 89628279ed9042c526a81facc09bf53f8fb8b83b4595b0d329d94c1611e0c379 \
      8079

# Register IDE with JetBrains Gateway
RUN echo 'runuser user -c "/opt/ideaIU/bin/remote-dev-server.sh registerBackendLocationForGateway"' > /etc/workstation-startup.d/110_register-intellij-with-gateway.sh \
    echo 'echo "IntelliJ-Ultimate ready for incoming gateway connection"' >> /etc/workstation-startup.d/110_register-intellij-with-gateway.sh
...

Zusätzliche IDE-Erweiterungen in Code OSS für Cloud Workstations installieren

Weitere IDE-Erweiterungen finden Sie unter Open VSX Registry. Sie können die URL der Datei .vsix auch ermitteln, indem Sie die URL aus dem Download-Link der jeweiligen Erweiterung kopieren.

Öffnen Sie die VSX-Seite für die Go-Spracherweiterung mit der Schaltfläche „Herunterladen“.

Wenn Sie den Extensions Marketplace von über eine Workstation öffnen, wird anstelle von Herunterladen die Option Installieren angezeigt.

Standardcode-OSS-Einstellungen für Cloud Workstations

Ausführliche Informationen zum Speichern von Einstellungen in Code OSS for Cloud Workstations finden Sie unter Einstellungen anpassen.

Wenn Sie in der Workstationkonfiguration ein persistentes Basisverzeichnis angeben, können Sie Standardeinstellungen für Code OSS für Cloud Workstations konfigurieren. Dazu fügen Sie ein Startskript hinzu, das Einstellungen in $HOME/.codeoss-cloudworkstations/data/Machine/settings.json schreibt.

Wenn Sie beispielsweise das Standardfarbdesign auf „Dunkel“ festlegen möchten, erweitern Sie das Basis-Editor-Image so, dass es das folgende Skript unter /etc/workstation-startup.d/150_default-ide-color-theme.sh enthält.

cat <<< $(jq '. += {"workbench.colorTheme": "Default Dark Modern"}' settings.json) > settings.json

Benutzerdefiniertes Container-Image erstellen

Ausführliche Informationen zu Docker-Befehlen finden Sie in der Docker-Referenz. Geben Sie den folgenden Befehl ein, um den Container zu erstellen:

docker build CUSTOM_IMAGE_FOLDER -t TARGET_IMAGE

Wenn der Text vor dem Bearbeitungssymbol Bearbeiten ersetzt wird, werden die anderen Beispiele auf dieser Seite aktualisiert.

Ersetzen Sie Folgendes:

  • CUSTOM_IMAGE_FOLDER ist der Pfad zu dem Ordner, den Sie zum Speichern Ihres benutzerdefinierten Images erstellt haben.
  • TARGET_IMAGE: der Pfad zu Ihrem Image in Artifact Registry (oder Container Registry).

    Beispielsweise könnte TARGET_IMAGE auf einen Zielbildpfad verweisen, der einem der folgenden Pfade ähnelt:

    *.pkg.dev/cloud-workstations-external/customimage:latest
    
    *.gcr.io/cloud-workstations-external/customimage:latest
    

    Ersetzen Sie * bei Bedarf durch den Namen der Region und alle zusätzlichen Kennzeichnungen.

Sie können auch die Umgebungsvariable CLOUD_WORKSTATIONS_CUSTOM_IMAGE so aktualisieren, dass sie auf das Repository verweist.

Weitere Informationen zum Speichern von Docker-Images in Artifact Registry finden Sie in den folgenden Abschnitten:

Benutzerdefiniertes Container-Image hosten

Wir empfehlen und unterstützen Artifact Registry, um benutzerdefinierte Container-Images zu hosten. Wenn Sie GitHub oder ein anderes öffentliches oder privates Repository verwenden, funktioniert Cloud Workstations möglicherweise nicht wie erwartet. Weitere Informationen finden Sie unter dem wichtigen Hinweis im Abschnitt Benutzerdefiniertes Container-Image verwenden.

Benutzerdefiniertes Container-Image testen

Nachdem der Container erstellt wurde, können Sie ihn mit dem folgenden Befehl testen:

docker run --privileged -p LOCAL_PORT:CONTAINER_PORT TARGET_IMAGE

Ersetzen Sie Folgendes:

  • LOCAL_PORT: die lokale Portnummer
  • CONTAINER_PORT: die Container-Portnummer

Wenn Sie beispielsweise LOCAL_PORT:CONTAINER_PORT durch 8080:80 ersetzen, wird Port 8080 für die lokale Verwendung und Port 80 für die Verwendung im Container zugewiesen.

Wenn Sie das Basiseditor-Image von Cloud Workstations erweitern, führen Sie den Befehl docker aus und testen Sie dann das Workstation-Image. Stellen Sie dazu über Ihren lokalen Browser eine Verbindung zur Workstation her oder führen Sie ssh aus, um eine Verbindung zu Ihrem Container herzustellen:

  • Wenn Sie eine Verbindung über den Browser herstellen, müssen Sie -p 8080:80 an den Befehl docker run übergeben und dann localhost:8080 öffnen.
  • Wenn Sie eine Verbindung über SSH herstellen möchten, müssen Sie -p 2222:22 an den Befehl docker run übergeben und dann ssh user@localhost -p 2222 ausführen.

Benutzerdefiniertes Container-Image verwenden

Wenn Sie das benutzerdefinierte Container-Image verwenden möchten, nachdem Sie es lokal erstellt und getestet haben, übertragen Sie den Container mit dem folgenden Befehl per Push an Artifact Registry (oder Container Registry):

docker push TARGET_IMAGE

Sie können jetzt mit dem Container-Image, das Sie gerade erstellt und per Push übertragen haben, eine Workstationkonfiguration erstellen.

Weitere Informationen finden Sie unter Docker-Repository mit Artifact Registry erstellen.

Probleme beheben

Sehen Sie sich die Ausgabelogs des Containers Ihrer laufenden Workstations an, um Probleme beim Ausführen des Container-Images zu ermitteln und zu beheben.

Sie sind für die Verwaltung und Aktualisierung von benutzerdefinierten Paketen und Abhängigkeiten, die benutzerdefinierten Images hinzugefügt wurden, verantwortlich.

Wenn Sie benutzerdefinierte Images erstellen, empfehlen wir Folgendes:

Nächste Schritte