Personalizar imágenes de contenedor

Las imágenes base preconfiguradas que proporcionan las estaciones de trabajo de Cloud solo contienen un entorno mínimo con IDE, herramientas básicas de lenguaje y terminal de Linux, y un servidor sshd. Para acelerar el configuración del entorno de casos de uso de desarrollo específicos, puedes crear imágenes de contenedor que extienden estas imágenes base para preinstalar herramientas y y que ejecutan secuencias de comandos de automatización.

En el caso de las imágenes de contenedores personalizadas, recomendamos configurar una canalización para volver a compilar estas imágenes cuando se actualice la imagen base de Cloud Workstations, en además de ejecutar una herramienta de análisis de contenedores, como Artifact Analysis para inspeccionar cualquier dependencia adicional que hayas agregado. Es responsable de mantener y actualizar paquetes personalizados y dependencias agregadas a imágenes personalizadas.

Antes de comenzar

  1. Necesitas una máquina con herramientas para compilar imágenes de contenedor, como Docker y para enviar imágenes a Artifact Registry (o Container Registry) con el Google Cloud CLI. Puedes usar Cloud Workstations o el Editor de Cloud Shell para estos pasos, que tienen preinstaladas estas herramientas.

  2. Selecciona la imagen base que deseas usar de nuestra lista de imágenes base compatibles, como us-central1-docker.pkg.dev/cloud-workstations-images/predefined/code-oss:latest.

    Como alternativa, puedes usar tu propia imagen de contenedor o imágenes de contenedor externas. Para ello, sigue las instrucciones para usar tu propia imagen de contenedor.

  3. Crea una carpeta como CUSTOM_IMAGE_FOLDER y una Dockerfile dentro de esta carpeta que extiende la imagen base seleccionada, como se muestra en los siguientes ejemplos.

Estructura de la imagen base de Cloud Workstations

Las imágenes base de Cloud Workstations comparten la siguiente estructura definida:

  • El archivo de punto de entrada de la imagen base se establece en /google/scripts/entrypoint.sh.
  • Al inicio, las imágenes base ejecutan archivos en /etc/workstation-startup.d/* en orden alfabético para inicializar el entorno de la estación de trabajo.

    Los archivos y su comportamiento son los siguientes:

    • 000_configure-docker.sh: Configura y ejecuta Docker dentro de la estación de trabajo.
    • 010_add-user.sh: Crea el usuario predeterminado en Cloud Workstations.

      Debido a que el disco persistente se conecta dinámicamente al contenedor, se deben agregar usuarios durante el inicio de la estación de trabajo, no en el Dockerfile.

    • 020_start-sshd.sh: Inicia el servicio sshd en el contenedor.

    • 110_start-$IDE.sh: Inicia el IDE para la imagen.

  • Cloud Workstations almacena imágenes de Docker en el directorio principal en /home/.docker_data para que se conserven entre sesiones.

Para agregar funciones adicionales durante el inicio de la estación de trabajo, agrega tus secuencias de comandos en el directorio /etc/workstation-startup.d/:

  • Las secuencias de comandos de este directorio se ejecutan como raíz de forma predeterminada. Para ejecutar las secuencias de comandos como otro usuario, usa el comando runuser.

  • Debido a que las secuencias de comandos se ejecutan en orden lexicográfico, te recomendamos prefijar las secuencias de comandos con un número de tres dígitos superior a 200.

Modificaciones del directorio principal

Cuando la configuración de la estación de trabajo especifica un directorio principal persistente (que es el comportamiento predeterminado), un disco persistente que crea una copia de seguridad del directorio principal se conecta de forma dinámica al contenedor en el entorno de ejecución. Este proceso reemplaza Las modificaciones realizadas en el directorio /home durante el tiempo de compilación de la imagen de contenedor

Para conservar las actualizaciones, modifica el directorio /home en el entorno de ejecución del contenedor Para ello, agrega una secuencia de comandos en el directorio /etc/workstation-startup.d. o agregando una configuración por usuario en el directorio /etc/profile.d. Para acelerar el proceso, considera ejecutar la secuencia de comandos de configuración en segundo plano (agrega un signo de unión, &, al final del comando) para evitar bloqueando el inicio del contenedor.

Estos son algunos ejemplos de configuración del tiempo de compilación que se deben mover al tiempo de ejecución del contenedor:

  • Configuración de git por usuario
  • Repositorios git clonados en el directorio principal
  • Configuración directa del usuario, como la colocación de archivos en un directorio $HOME/.config
  • Creación de usuarios

Creación y modificación de usuarios

Debido a que el disco persistente se conecta dinámicamente al contenedor en el entorno de ejecución se deben agregar usuarios durante el inicio de la estación de trabajo, no en el Dockerfile. Para modificar o crear usuarios adicionales, te recomendamos que actualices /etc/workstation-startup.d/010_add-user.sh o crees tu propia secuencia de comandos que se ejecute al inicio.

Además, puedes modificar el perfil de Bash predeterminado para los usuarios actualizando los archivos en /etc/profile.d.

Actualizar claves APT seguras preconfiguradas

Las imágenes base de Cloud Workstations vienen preinstaladas con varias herramientas que se obtienen de varios repositorios de terceros mediante APT seguro. Como parte de la instalación las claves públicas que proporcionan los propietarios del repositorio se importan con gpg y se colocan en archivos individuales en /usr/share/keyrings/. Se hace referencia a estos archivos desde los archivos list correspondientes en /etc/apt/sources.list.d/. Esto permite que apt verifique la integridad de un repositorio determinado cuando que estás interactuando con él.

En ocasiones, los propietarios de repositorios externos pueden decidir cambiar la clave pública que se usa para validar la integridad de su repositorio, lo que hace que apt muestre un error cuando interactúa con él. Para resolver este posible problema, puedes usar /google/scripts/refresh-preinstalled-apt-keys.sh, que obtiene las versiones más recientes de las claves públicas preinstaladas y las vuelve a importar.

Cómo enumerar las versiones de IDE instaladas

Varias imágenes base de Cloud Workstations vienen preinstaladas con un IDE. Para tu comodidad, consulta la secuencia de comandos /google/scripts/preinstalled-ide-versions.sh incluida, que muestra el nombre y la información de la versión de los IDE instalados en la imagen.

Cómo desactivar los privilegios de raíz de sudo

El usuario de la estación de trabajo predeterminada tiene sudo privilegios de acceso raíz en estas contenedores. Para desactivar el acceso raíz al contenedor de Docker, configura la Variable de entorno CLOUD_WORKSTATIONS_CONFIG_DISABLE_SUDO a true cuando crees la configuración de la estación de trabajo.

Para establecer esta variable de entorno a través de la consola de Google Cloud cuando crees la configuración de tu estación de trabajo, sigue estos pasos:

  1. Cuando crees la configuración de tu estación de trabajo, complétala para la sección Información básica y la Configuración de la máquina.
  2. En el diálogo Personalización del entorno, expande la Opciones avanzadas de contenedor y selecciona Variables de entorno.
  3. Haz clic en agregarAgregar variable.
  4. Ingresa CLOUD_WORKSTATIONS_CONFIG_DISABLE_SUDO y true como el valor.

Usa tu propia imagen de contenedor

También puedes usar tu propia imagen de contenedor o imágenes de contenedores externas, siempre que se basen en Linux y ejecuten un proceso de bloqueo cuando se inicie el contenedor.

Cuando configuras el Dockerfile, la instrucción ENTRYPOINT debe ejecutar un proceso de bloqueo, como sleep infinity, para que el contenedor siga ejecutándose, en lugar de salir de inmediato. Como alternativa, en la configuración de la estación de trabajo, puedes establecer el campo config.container.args para especificar un proceso de bloqueo.

Cuando uses tu propia imagen de contenedor, ten en cuenta lo siguiente:

  • Cloud Workstations no requiere secuencias de comandos adicionales de la imagen base de Cloud Workstations.

    Sin embargo, puedes ver las secuencias de comandos en el directorio /etc/workstation-startup.d/ dentro de un contenedor que ejecuta la imagen base de Cloud Workstations. Los nombres de archivo indican lo que hace cada secuencia de comandos.

  • Te recomendamos que ejecutes un servidor SSH en el contenedor. Consulta /etc/workstation-startup.d/020_start-sshd.sh en la imagen base predeterminada para obtener información sobre cómo Cloud Workstations configura esto de forma predeterminada.

  • Te recomendamos que ejecutes tu IDE o servidor web predeterminados en el puerto 80.

Extiende las imágenes base de Cloud Workstations

Cuando extiendas una imagen base de Cloud Workstations para crear una imagen personalizada para tu de trabajo, puedes adoptar tres enfoques:

  1. Actualiza tu Dockerfile para incluir los recursos estáticos adicionales que desees agregar.
  2. Agrega archivos ejecutables adicionales en /etc/workstation-startup.d/ al personalizar el contenedor en ejecución. Los archivos de este directorio se ejecutan automáticamente en orden alfabético cuando se inicia el contenedor, por lo que puedes agregar un prefijo al nombre del archivo para ejecutarlo en el momento adecuado durante el inicio de la estación de trabajo.
  3. Anula el ENTRYPOINT en tu Dockerfile para personalizar por completo el inicio del contenedor.

Muestras de Dockerfiles personalizados

En esta sección, se proporcionan ejemplos de situaciones y también instrucciones para crear las tuyas Dockerfiles.

Imagen de contenedor con emacs preinstalada

Para crear una imagen de contenedor con emacs preinstalado, ejecuta los siguientes comandos:

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

RUN sudo apt update
RUN sudo apt install -y emacs

Imagen de contenedor con personalización del usuario

Sigue estos pasos para personalizar una imagen de contenedor:

  1. Crea una secuencia de comandos en /etc/workstation-startup.d/* que se ejecute después de 010_add-user.sh, por ejemplo, 011_customize-user.sh:

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

    Reemplaza $GROUP por el nombre del grupo nuevo $USERNAME por el nombre de usuario del usuario

  2. Si le asignaste el nombre 011_customize-user.sh a tu secuencia de comandos, agrega lo siguiente a tu imagen en tu Dockerfile y haz que sea ejecutable:

    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
    

Imagen de contenedor que establece variables de entorno del contenedor en sesiones de SSH

Variables de entorno que se establecen a nivel de la configuración o la estación de trabajo se pasan a subprocesos directos con el comando de punto de entrada. Esto incluye las en las imágenes base preconfiguradas. Sin embargo, las sesiones de SSH no son procesos secundarios del punto de entrada y no tienen configuradas estas variables de entorno personalizadas.

Para establecer esas variables de entorno en las sesiones SSH, configura un de contenedor que retransmite estas variables de entorno desde ingress al archivo /etc/environment.

Para lograrlo, sigue estos pasos:

  1. Crea una secuencia de comandos en /etc/workstation-startup.d/* que se ejecute después de 010_add-user.sh, por ejemplo, 011_add-ssh-env-variables.sh:

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

    Reemplaza CUSTOM_ENV_VAR por la variable de entorno deseada de la fuente de datos.

  2. Si le asignaste el nombre 011_add-ssh-env-variables.sh a la secuencia de comandos, agrega lo siguiente: siguiente a tu imagen en tu Dockerfile y haz que sea ejecutable:

    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
    

Imagen de contenedor que habilita el reenvío de X11 para sesiones de SSH

El reenvío de X11 te permite iniciar aplicaciones remotas y reenviarlas mostrar a una máquina local.

Para crear una imagen de contenedor que habilite el reenvío de X11, modifica el archivo de configuración del daemon de OpenSSH (/etc/ssh/sshd_config) que proporcionan las imágenes base de las estaciones de trabajo de Cloud. Para ello, agrega X11Forwarding yes (para permitir el reenvío de X11) y AddressFamily inet (para garantizar que solo se use IPv4). Para obtener más información sobre estas palabras clave, consulta las páginas web de OpenBSD sobre AddressFamily y X11Forwarding.

Este es un Dockerfile de muestra, que realiza las modificaciones necesarias:

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

Cómo copiar Code OSS para Cloud Workstations en otra imagen de contenedor

Una compilación de varias etapas te permite usar varias sentencias FROM en tu Dockerfile. Cada instrucción FROM puede usar una base diferente y permite copiar artefactos entre etapas de compilación. Para agregar Code OSS para Cloud Workstations a otra imagen de contenedor usa una compilación de varias etapas para copiar la carpeta de la aplicación /opt/code-oss en tu imagen. Si quieres iniciar Code OSS para Cloud Workstations en el momento de inicio del contenedor; además, copia la secuencia de comandos /etc/workstation-startup.d/110_start-code-oss.sh en el contenedor.

Este es un Dockerfile de ejemplo que copia Code OSS en JetBrains IntelliJ. La mejor imagen Luego, puedes interactuar con cualquiera de los IDEs:

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"]

Imagen de contenedor que preinstala extensiones de IDE en Code OSS para estaciones de trabajo de Cloud para el desarrollo de Java

Para crear una imagen de contenedor que preinstale las extensiones del IDE en En el momento de la compilación, ejecuta los siguientes comandos a través de Code OSS para Cloud Workstations para desarrollo de Java:

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

Si instalas extensiones de antemano, se consideran extensiones integradas. No podrás actualizar estas extensiones y es posible que no aparezcan en la sección instalada de Extensions Marketplace. Sin embargo, puedes encontrar tus extensiones integradas buscando @builtin.

Otra forma de instalar extensiones en el inicio es ejecutar una secuencia de comandos de inicio. Por ejemplo, incluye la siguiente secuencia de comandos de inicio en /etc/workstation-startup.d/120_install_extensions.sh:

/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

Con este método, la extensión aparece en el Marketplace de Extensiones y tú desde ahí.

Instala IDEs y complementos de JetBrains en imágenes base

Cuando personalizas imágenes de Docker para configuraciones de estaciones de trabajo, puedes instalar IDE de JetBrains y complementos, como Cloud Code para IntelliJ. en la imagen base. Las imágenes base de Cloud Workstations para productos de JetBrains incluyen las siguientes secuencias de comandos para ayudarte a hacer lo siguiente:

  • jetbrains-installer.sh: Instala los IDE de JetBrains.
  • plugin-installer.sh: Instala complementos, como Cloud Code para IntelliJ.

Usa estas secuencias de comandos según sea necesario para personalizar la imagen base, llamarlas con una secuencia de comandos de inicio o ejecutarlas después de iniciar la estación de trabajo.

Secuencias de comandos del instalador

Para ver los archivos fuente de las secuencias de comandos jetbrains-installer.sh y plugin-installer.sh, inicia una estación de trabajo con una configuración que use una de las imágenes predefinidas de JetBrains, conéctate a la estación de trabajo a través de JetBrains Gateway o SSH y, luego, explora los archivos de secuencia de comandos en el directorio installer-scripts, que se encuentra en el directorio raíz.

Te recomendamos que ejecutes estas secuencias de comandos en el tiempo de compilación del contenedor. Evita ejecutarlos en una estación de trabajo que ya se inició.

Usa la secuencia de comandos del instalador de complementos

La secuencia de comandos plugin-installer.sh usa la siguiente sintaxis:

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

Reemplaza lo siguiente:

  • VERSION: Es el número de versión opcional del complemento que se instalará.
  • DESTINATION-DIRECTORY: Es el directorio opcional en el que el complemento. una aplicación de este tipo. Si no se especifica, se usa el directorio de trabajo.
  • CHECKSUM: La suma de verificación SHA-256 opcional del complemento solicitado.
  • -f: Si se especifica, se reemplazará cualquier complemento existente.
  • PLUGIN_ID: Es el identificador de complemento numérico obligatorio del mercado de JetBrains. Por ejemplo, para agregar Dart, usa 6351 como PLUGIN_ID. Para agregar Cloud Code para IntelliJ, usa 8079 como PLUGIN_ID.

Por ejemplo, para instalar la versión más reciente del complemento de Dart en IntelliJ, ejecuta el siguiente comando:

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

Usa la secuencia de comandos del instalador de JetBrains

Recomendamos que uses la secuencia de comandos del instalador de JetBrains cuando extender una imagen base preconfigurada para los IDE de JetBrains.

La secuencia de comandos jetbrains-installer.sh usa la siguiente sintaxis:

jetbrains-installer.sh IDE [ pinned|latest ]

Reemplaza lo siguiente:

  • IDE: El IDE de JetBrains que se instalará. Debes usar una de las siguientes abreviaturas de IDE:

    IDE Producto instalado
    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: Opcional. Usa el método fijado con la última versión del IDE. La configuración predeterminada es latest.

Por ejemplo, para instalar la versión más reciente de Clion, ejecuta el siguiente comando:

jetbrains-installer.sh clion

Personaliza los archivos de configuración del IDE de JetBrains

Si se especifica un directorio principal persistente en las estaciones de trabajo de procesamiento, las imágenes base de Cloud Workstations con IDE de JetBrains conservar automáticamente la configuración de $IDE.vmoptions y $IDE.properties archivos. Para anular la ubicación predeterminada de estos archivos, especifica La variable de entorno CLOUD_WORKSTATIONS_JETBRAINS_PERISTED_CONFIG_DIR

Para obtener más información, consulta /etc/workstation-startup.d/120_persist-jetbrains-configs.sh en cualquiera Imagen base de JetBrains para aprender cómo Cloud Workstations configura esto de forma predeterminada.

Extiende una imagen base de Docker con Cloud Code para IntelliJ

En el siguiente fragmento de Dockerfile, se extiende una imagen base de Docker con Cloud Code para IntelliJ, ya que incluye 8079 como el identificador de complemento requerido. En el ejemplo, también se especifica version 22.9.3-222 como la versión de destino, /opt/ideaIU/plugins/ como el directorio de destino y 89628279ed9042c526a81facc09bf53f8fb8b83b4595b0d329d94c1611e0c379 como suma de comprobación:

...
# 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
...

Instala extensiones de IDE adicionales en Code OSS para Cloud Workstations

Puedes encontrar extensiones de IDE adicionales en la Abre VSX Registry. También puedes encontrar la URL del archivo .vsix copiando la URL en el Descargar de cualquier extensión.

Abre la página de VSX de la extensión de idioma Go que muestra el botón Descargar.

Si abres Marketplace de Extensiones de un estación de trabajo, aparecerá Instalar en lugar de Descargar.

Configuración predeterminada de Code OSS para Cloud Workstations

Para obtener información detallada sobre el almacenamiento de la configuración en Code OSS para Cloud Workstations, consulta Cómo personalizar la configuración.

Si especificas un directorio principal persistente en la configuración de las estaciones de trabajo, puedes definir la configuración predeterminada de Code OSS para Cloud Workstations agregando un secuencia de comandos de inicio que escribe la configuración en $HOME/.codeoss-cloudworkstations/data/Machine/settings.json

Por ejemplo, si deseas establecer el tema de color predeterminado en Oscuro, extiende la imagen del editor base para incluir la siguiente secuencia de comandos en /etc/workstation-startup.d/150_default-ide-color-theme.sh.

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

Compila una imagen de contenedor personalizada

Para obtener información detallada sobre los comandos de Docker, consulta la referencia de Docker. Escribe el comando siguiente para compilar tu contenedor:

docker build CUSTOM_IMAGE_FOLDER -t TARGET_IMAGE

Ten en cuenta que, si reemplazas el texto que precede al ícono edit Editar, se actualizarán los otros ejemplos de esta página.

Reemplaza lo siguiente:

  • CUSTOM_IMAGE_FOLDER: Es la ruta de acceso a la carpeta que creaste para almacenar tu imagen personalizada.
  • TARGET_IMAGE: Es la ruta de acceso a tu imagen en Artifact Registry. (o Container Registry).

    Por ejemplo, TARGET_IMAGE podría apuntar a una imagen de destino. ruta de acceso similar a cualquiera de las siguientes:

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

    Reemplaza * según sea necesario por el nombre de la región y cualquier identificador adicional.

También puedes actualizar la variable de entorno CLOUD_WORKSTATIONS_CUSTOM_IMAGE para que apunte al repositorio.

Para obtener más información sobre el almacenamiento de imágenes de Docker en Artifact Registry, consulta las siguientes secciones:

Aloja tu imagen de contenedor personalizada

Para alojar imágenes de contenedor personalizadas, recomendamos y admitimos Artifact Registry. Si usas GitHub o cualquier otro repositorio público o privado, Cloud Workstations podría no funcionar como se espera. Para obtener más información, consulta la nota importante en la sección Usa una imagen de contenedor personalizado.

Prueba tu imagen de contenedor personalizada

Cuando el contenedor termine de compilarse, puedes probarlo con los siguientes comandos: :

docker run --privileged -p LOCAL_PORT:CONTAINER_PORT TARGET_IMAGE

Reemplaza lo siguiente:

  • LOCAL_PORT: Es el número del puerto local.
  • CONTAINER_PORT: Es el número de puerto del contenedor.

Por ejemplo, reemplazar LOCAL_PORT:CONTAINER_PORT por 8080:80 asigna el puerto 8080 para usarlo de forma local y el puerto 80 para usarlo en el contenedor.

Si extiendes la imagen del editor base de las estaciones de trabajo de Cloud, ejecuta el comando docker y, luego, prueba la imagen de la estación de trabajo conectándote a ella a través de tu navegador local o ejecutando ssh para conectarte a tu contenedor:

  • Si te conectas a través del navegador, asegúrate de pasar -p 8080:80 a tu comando docker run y, luego, abre localhost:8080.
  • Si prefieres conectarte a través de SSH, asegúrate de pasar -p 2222:22 al comando docker run y, luego, ejecuta ssh user@localhost -p 2222.

Usa una imagen de contenedor personalizada

Para usar tu imagen de contenedor personalizada después de compilarla y probarla de forma local, envía el contenedor a Artifact Registry (o Container Registry) con el siguiente comando:

docker push TARGET_IMAGE

Ahora puedes crear una configuración de estación de trabajo con la imagen de contenedor que acabas de crear y enviar.

Para obtener más información, consulta Cómo crear un repositorio de Docker con Artifact Registry.

Cómo depurar problemas

Para encontrar y depurar problemas que se ejecutan en tu imagen de contenedor, revisa los registros de salida del contenedor desde tus estaciones de trabajo en ejecución.

Eres responsable de mantener y actualizar los paquetes personalizados y dependencias agregadas a las imágenes personalizadas.

Si creas imágenes personalizadas, te recomendamos lo siguiente:

¿Qué sigue?