Personalizar imagens de contêiner

As imagens de base pré-configuradas fornecidas pelas Estações de trabalho em nuvem contêm apenas um ambiente mínimo com IDE, terminal básico do Linux, ferramentas de linguagem e um servidor sshd. Para acelerar a configuração do ambiente de casos de uso de desenvolvimento específicos, crie imagens de contêiner personalizadas que estendam essas imagens de base para pré-instalar ferramentas e dependências e que executem scripts de automação.

Para imagens de contêiner personalizadas, recomendamos configurar um pipeline para reconstruir automaticamente essas imagens quando a imagem de base do Cloud Workstations for atualizada, além de executar uma ferramenta de verificação de contêineres, como o Artifact Analysis, para inspecionar dependências adicionais. Você é responsável por manter e atualizar pacotes e dependências personalizados adicionados a imagens personalizadas.

Antes de começar

  1. Você precisa de uma máquina com ferramentas para criar imagens de contêiner, como o Docker, e para enviar imagens ao Artifact Registry usando a CLI do Google Cloud. Você pode usar o Cloud Workstations ou o Editor do Cloud Shell para realizar essas etapas, que têm essas ferramentas pré-instaladas.

  2. Selecione a imagem de base que você quer usar na lista de imagens de base compatíveis, como us-central1-docker.pkg.dev/cloud-workstations-images/predefined/code-oss:latest.

    Como alternativa, você pode usar sua própria imagem de contêiner ou imagens de contêiner externas seguindo as instruções para usar sua própria imagem de contêiner.

  3. Crie uma pasta, como CUSTOM_IMAGE_FOLDER, e um Dockerfile dentro dela, estendendo a imagem de base selecionada, conforme mostrado nos exemplos a seguir.

Estrutura da imagem de base do Cloud Workstations

As imagens de base das estações de trabalho do Cloud compartilham a seguinte estrutura definida:

  • O arquivo de ponto de entrada da imagem de base está definido como /google/scripts/entrypoint.sh.
  • Na inicialização, as imagens de base executam arquivos em /etc/workstation-startup.d/* em ordem lexicográfica para inicializar o ambiente da estação de trabalho.

    Os arquivos e o comportamento deles são os seguintes:

    • 000_configure-docker.sh: configura e executa o Docker na estação de trabalho.
    • 010_add-user.sh: cria o usuário padrão no Cloud Workstations.

      Como o disco permanente é anexado dinamicamente ao contêiner, os usuários precisam ser adicionados na inicialização da estação de trabalho, não no Dockerfile.

    • 020_start-sshd.sh: inicia o serviço sshd no contêiner.

    • 030_customize-environment.sh: executa /home/user/.workstation/customize_environment como user.

    • 110_start-$IDE.sh: inicia o ambiente de desenvolvimento integrado para a imagem.

  • O Cloud Workstations armazena imagens do Docker no diretório inicial em /home/.docker_data para que as imagens sejam preservadas entre as sessões.

Para adicionar mais funcionalidades durante a inicialização da estação de trabalho, adicione seus scripts no diretório /etc/workstation-startup.d/:

  • Por padrão, os scripts nesse diretório são executados como raiz. Para executar os scripts como um usuário diferente, use o comando runuser.

  • Como os scripts são executados em ordem lexicográfica, recomendamos que você adicione um prefixo com um número de três dígitos maior que 200.

Como alternativa, se você não quiser estender uma imagem de estação de trabalho, crie um script customize_environment no diretório inicial.

Modificações no diretório principal

Quando a configuração da estação de trabalho especifica um diretório inicial permanente (que é o comportamento padrão), um disco permanente que faz backup do diretório inicial é anexado dinamicamente ao contêiner durante a execução. Esse processo substitui as modificações feitas no diretório /home durante a criação da imagem do contêiner.

Para preservar as atualizações, modifique o diretório /home no tempo de execução do contêiner adicionando um script no diretório /etc/workstation-startup.d ou adicionando uma configuração por usuário no diretório /etc/profile.d. Para acelerar o processo, execute o script de configuração como um processo em segundo plano (adicione um e comercial, &, ao final do comando) para evitar o bloqueio da inicialização do contêiner.

Alguns exemplos de configuração de tempo de build que precisam ser movidos para o tempo de execução do contêiner:

  • Configuração de git por usuário
  • Repositórios git clonados no diretório principal
  • Configuração direta do usuário, como colocar arquivos em um diretório $HOME/.config
  • Criação de usuário

Criação e modificação de usuários

Como o disco permanente é anexado dinamicamente ao contêiner durante a execução, os usuários precisam ser adicionados na inicialização da estação de trabalho, não no Dockerfile. Para modificar ou criar mais usuários, recomendamos atualizar /etc/workstation-startup.d/010_add-user.sh ou criar seu próprio script que é executado na inicialização.

Além disso, é possível modificar o perfil bash padrão dos usuários atualizando os arquivos em /etc/profile.d.

Atualizar chaves APT seguras pré-configuradas

As imagens de base do Cloud Workstations vêm pré-instaladas com várias ferramentas obtidas de vários repositórios de terceiros usando o APT seguro. Como parte do processo de instalação, as chaves públicas fornecidas pelos proprietários do repositório são importadas usando gpg e colocadas em arquivos individuais em /usr/share/keyrings/. Esses arquivos são referenciados nos arquivos list correspondentes em /etc/apt/sources.list.d/. Isso permite que o apt verifique a integridade de um repositório específico ao interagir com ele.

Às vezes, os proprietários de repositórios de terceiros podem mudar a chave pública usada para validar a integridade do repositório, o que faz com que o apt mostre um erro ao interagir com ele. Para resolver esse problema em potencial, use /google/scripts/refresh-preinstalled-apt-keys.sh, que recebe as versões mais recentes das chaves públicas pré-instaladas e as importa novamente.

Listar versões instaladas do IDE

Várias imagens de base das estações de trabalho do Cloud vêm pré-instaladas com um ambiente de desenvolvimento integrado. Para facilidade, consulte o script /google/scripts/preinstalled-ide-versions.sh incluído, que lista o nome e as informações de versão dos IDEs instalados na imagem.

Desativar privilégios de raiz do sudo

O usuário padrão da estação de trabalho tem privilégios de acesso root sudo nesses contêineres. Para desativar o acesso root ao contêiner do Docker, defina a variável de ambiente CLOUD_WORKSTATIONS_CONFIG_DISABLE_SUDO como true ao criar a configuração da estação de trabalho.

Para definir essa variável de ambiente no console Google Cloud ao criar a configuração da estação de trabalho, siga estas etapas:

  1. Ao criar a configuração da estação de trabalho, preencha as informações básicas e a configuração da máquina.
  2. Na caixa de diálogo Personalização do ambiente, expanda a seção Opções avançadas de contêiner e selecione Variáveis de ambiente.
  3. Clique em AdicionarAdicionar variável.
  4. Insira CLOUD_WORKSTATIONS_CONFIG_DISABLE_SUDO e true como o valor.

Personalizar sem estender uma imagem

Para facilitar, todas as imagens de base do Cloud Workstations verificam a presença de um arquivo executável localizado em /home/user/.workstation/customize_environment e, se ele existir, o executam em segundo plano como user. Isso permite executar qualquer script ou binário na inicialização. Diferentemente de .profile ou .bashrc, o script é executado apenas uma vez quando a estação de trabalho é iniciada, em vez de uma vez para cada login do shell.

Como o script customize_environment é executado como user, atualize as permissões conforme necessário ao escrever o script. Por exemplo, se você quiser instalar o Emacs sempre que a estação de trabalho for iniciada, o conteúdo de customize_environment poderá ser semelhante ao seguinte:

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

Os registros de execução do customize_environment podem ser encontrados no contêiner em /var/log/customize_environment e também são gravados nos registros de saída do contêiner. Se a execução de customize_environment for bem-sucedida, um arquivo será criado em /var/run/customize_environment_done. Como o customize_environment é executado em paralelo com a inicialização da estação de trabalho, os pacotes instalados pelo script podem ficar disponíveis logo após a inicialização.

Como evitar tempos limite de inatividade

Para sua conveniência, todas as imagens de base das estações de trabalho do Cloud incluem um script pré-instalado em /google/scripts/keep_alive.sh. Esse script envia mensagens regulares de manutenção de atividade, o que pode impedir que a estação de trabalho seja desligada devido a tempos limite de inatividade quando você está executando processos em segundo plano sem interação direta.

Use sua própria imagem de contêiner

Você também pode usar sua própria imagem de contêiner ou imagens de contêiner externas, desde que sejam baseadas em Linux e executem um processo de bloqueio quando o contêiner é iniciado.

Ao configurar o Dockerfile, a instrução ENTRYPOINT precisa executar um processo de bloqueio, como sleep infinity, para que o contêiner continue em execução, em vez de sair imediatamente. Como alternativa, na configuração da estação de trabalho, você pode definir o campo config.container.args para especificar um processo de bloqueio.

Ao usar sua própria imagem de contêiner, observe o seguinte:

  • O Cloud Workstations não exige scripts adicionais da imagem de base do Cloud Workstations.

    No entanto, é possível consultar os scripts no diretório /etc/workstation-startup.d/ em um contêiner que executa a imagem de base do Cloud Workstations. Os nomes dos arquivos indicam o que cada script faz.

  • Recomendamos que você execute um servidor SSH no contêiner. Consulte /etc/workstation-startup.d/020_start-sshd.sh na imagem de base padrão para saber como o Cloud Workstations configura isso por padrão.

  • Recomendamos executar o IDE ou servidor da Web padrão na porta 80.

Estender imagens de base do Cloud Workstations

Ao estender uma imagem de base do Cloud Workstations para criar uma imagem personalizada para seu ambiente de estação de trabalho, você pode adotar três abordagens:

  1. Atualize seu Dockerfile para incluir outros recursos estáticos que você quer adicionar.
  2. Adicione outros arquivos executáveis em /etc/workstation-startup.d/ para personalizar o contêiner em execução. Os arquivos nesse diretório são executados automaticamente em ordem lexicográfica na inicialização do contêiner. Portanto, você pode adicionar um prefixo ao nome do arquivo para executá-lo no momento adequado durante a inicialização da estação de trabalho.
  3. Substitua o ENTRYPOINT no Dockerfile para personalizar totalmente a inicialização do contêiner.

Exemplos de Dockerfiles personalizados

Nesta seção, fornecemos exemplos de cenários e instruções para criar seus próprios Dockerfiles.

Imagem de contêiner com emacs pré-instalado

Para criar uma imagem de contêiner com o emacs pré-instalado, execute os seguintes comandos:

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

RUN sudo apt update
RUN sudo apt install -y emacs

Imagem de contêiner com personalização do usuário

Siga estas etapas para personalizar uma imagem de contêiner:

  1. Crie um script em /etc/workstation-startup.d/* que seja executado após 010_add-user.sh. Por exemplo, 011_customize-user.sh:

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

    Substitua $GROUP pelo novo nome do grupo e $USERNAME pelo nome de usuário do usuário.

  2. Supondo que você tenha nomeado o script como 011_customize-user.sh, adicione o seguinte à imagem no Dockerfile e torne-o executável:

    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
    

Imagem de contêiner que define variáveis de ambiente do contêiner em sessões SSH

As variáveis de ambiente definidas na configuração ou no nível da estação de trabalho são transmitidas para subprocessos diretos usando o comando de ponto de entrada. Isso inclui o IDE nas imagens de base pré-configuradas. No entanto, as sessões SSH não são processos filhos do ponto de entrada e não têm essas variáveis de ambiente personalizadas definidas.

Para definir essas variáveis de ambiente nas sessões SSH, configure uma imagem de contêiner personalizada que transmita essas variáveis do comando de ponto de entrada do contêiner para o arquivo /etc/environment.

Para fazer isso, siga estas etapas:

  1. Crie um script em /etc/workstation-startup.d/* que seja executado após 010_add-user.sh. Por exemplo, 011_add-ssh-env-variables.sh:

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

    Substitua CUSTOM_ENV_VAR pelo nome da variável de ambiente pretendida.

  2. Supondo que você tenha nomeado o script como 011_add-ssh-env-variables.sh, adicione o seguinte à imagem no Dockerfile e torne-o executável:

    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
    

Imagem do contêiner que permite o encaminhamento X11 para sessões SSH.

Com o encaminhamento X11, é possível iniciar aplicativos remotos e encaminhar a exibição do aplicativo para uma máquina local.

Para criar uma imagem de contêiner que permita o encaminhamento X11, modifique o arquivo de configuração do daemon OpenSSH (/etc/ssh/sshd_config) fornecido pelas imagens de base do Cloud Workstations anexando X11Forwarding yes (para permitir o encaminhamento X11) e AddressFamily inet (para garantir que apenas o IPv4 seja usado). Para mais informações sobre essas palavras-chave, consulte as páginas da Web do OpenBSD sobre AddressFamily e X11Forwarding.

Confira um exemplo de Dockerfile que faz as modificações necessárias:

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

Copiar o Code OSS para o Cloud Workstations em outra imagem de contêiner

Com um build de vários estágios, é possível usar várias instruções FROM no Dockerfile. Cada instrução FROM pode usar uma base diferente e permite copiar artefatos entre estágios de build. Para adicionar o Code OSS para o Cloud Workstations a outra imagem de contêiner, use um build de várias fases para copiar a pasta do aplicativo /opt/code-oss na sua imagem. Se você quiser iniciar o Code OSS para estações de trabalho em nuvem durante a inicialização do contêiner, copie também o script /etc/workstation-startup.d/110_start-code-oss.sh para o contêiner.

Este é um exemplo de Dockerfile que copia o Code OSS para a imagem do JetBrains IntelliJ Ultimate. Em seguida, interaja com qualquer um dos ambientes de desenvolvimento integrado:

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

Imagem de contêiner que pré-instala extensões de ambiente de desenvolvimento integrado no Code OSS para estações de trabalho em nuvem para desenvolvimento em Java.

Para criar uma imagem de contêiner que pré-instala extensões de ambiente de desenvolvimento integrado no Code OSS para estações de trabalho em nuvem para desenvolvimento em Java no momento da criação, execute os seguintes comandos:

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

RUN chmod a+rwx -R /opt/code-oss/extensions/

Se você pré-instalar extensões, elas serão consideradas integradas. Não será possível atualizar essas extensões, e elas talvez não apareçam na seção instalada do Marketplace de extensões. No entanto, você pode encontrar as extensões integradas pesquisando @builtin.

Outra maneira de instalar extensões na inicialização é executar um script de inicialização. Por exemplo, inclua o seguinte script de inicialização em /etc/workstation-startup.d/120_install_extensions.sh:

sudo -u user /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

Usando esse método, a extensão aparece no do Marketplace de extensões, e você pode atualizar de lá.

Instalar IDEs e plug-ins do JetBrains em imagens de base

Ao personalizar imagens do Docker para configurações de estação de trabalho, é possível instalar ambientes de desenvolvimento integrado e plug-ins da JetBrains, como o Cloud Code para IntelliJ, na imagem de base. As imagens de base do Cloud Workstations para produtos JetBrains incluem os seguintes scripts para ajudar você:

  • jetbrains-installer.sh: instalar IDEs da JetBrains
  • plugin-installer.sh: instale plug-ins, como o Cloud Code para IntelliJ

Use esses scripts conforme necessário para personalizar a imagem de base, chamá-los com um script de inicialização ou executá-los depois de iniciar a estação de trabalho.

Scripts de instalação

Para conferir os arquivos de origem dos scripts jetbrains-installer.sh e plugin-installer.sh, inicie uma estação de trabalho usando uma configuração que use uma das imagens predefinidas do JetBrains, conecte-se a ela pelo JetBrains Gateway ou por SSH e navegue pelos arquivos de script no diretório installer-scripts, que está localizado no diretório raiz.

Recomendamos que você execute esses scripts durante a criação do contêiner. Evite executá-los em uma estação de trabalho já iniciada.

Usar o script do instalador de plug-ins

O script plugin-installer.sh usa a seguinte sintaxe:

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

Substitua:

  • VERSION: número da versão opcional do plug-in a ser instalado.
  • DESTINATION-DIRECTORY: diretório opcional em que o plug-in será instalado. Se não for especificado, o diretório de trabalho será usado.
  • CHECKSUM: soma de verificação SHA-256 opcional do plug-in solicitado.
  • -f: se especificado, qualquer plug-in atual será substituído.
  • PLUGIN_ID: o identificador numérico obrigatório do plug-in no marketplace da JetBrains. Por exemplo, para adicionar Dart use 6351 como o PLUGIN_ID. Para adicionar o Cloud Code para IntelliJ, use 8079 como PLUGIN_ID.

Por exemplo, para instalar a versão mais recente do plug-in do Dart no IntelliJ, execute o seguinte comando:

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

Usar o script do instalador do JetBrains

Recomendamos que você use o script do instalador do JetBrains ao estender uma imagem de base pré-configurada para ambientes de desenvolvimento integrado do JetBrains.

O script jetbrains-installer.sh usa a seguinte sintaxe:

jetbrains-installer.sh IDE [ pinned|latest ]

Substitua:

  • IDE: o ambiente de desenvolvimento integrado da JetBrains a ser instalado. Use uma das seguintes abreviações de IDE:

    Ambiente de desenvolvimento integrado Produto 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 Piloto
    rider Piloto
    rm RubyMine
    rubymine RubyMine
    ws WebStorm
    webstorm WebStorm
  • pinned|latest: opcional. Use a versão fixada ou mais recente da IDE. O padrão é latest.

Por exemplo, para instalar a versão mais recente do Clion, execute o seguinte comando:

/installer-scripts/jetbrains-installer.sh clion

Personalizar arquivos de configuração do ambiente de desenvolvimento integrado do JetBrains

Se um diretório inicial permanente for especificado na configuração das estações de trabalho, as imagens de base do Cloud Workstations com ambientes de desenvolvimento integrado do JetBrains vão manter automaticamente os arquivos de configuração $IDE.vmoptions e $IDE.properties. Para substituir o local padrão desses arquivos, especifique a variável de ambiente CLOUD_WORKSTATIONS_JETBRAINS_PERISTED_CONFIG_DIR.

Para mais informações, consulte /etc/workstation-startup.d/120_persist-jetbrains-configs.sh em qualquer imagem de base do JetBrains para saber como o Cloud Workstations configura isso por padrão.

Estender uma imagem base do Docker com o Cloud Code para IntelliJ

O snippet de Dockerfile a seguir estende uma imagem base do Docker com o Cloud Code para IntelliJ, incluindo 8079 como o identificador de plug-in necessário. O exemplo também especifica opcionalmente version 22.9.3-222 como o número da versão, /opt/ideaIU/plugins/ como o diretório de destino e 89628279ed9042c526a81facc09bf53f8fb8b83b4595b0d329d94c1611e0c379 como o checksum:

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

Instalar extensões adicionais do ambiente de desenvolvimento integrado no Code OSS para estações de trabalho em nuvem

Encontre outras extensões de ambiente de desenvolvimento integrado no Open VSX Registry. Você também pode encontrar o URL do arquivo .vsix copiando o URL do link Download de qualquer extensão.

Abra a página VSX da extensão da linguagem Go que mostra o botão &quot;Download&quot;.

Se você abrir o Extensions Marketplace em uma estação de trabalho, a opção Instalar vai aparecer em vez de Baixar.

Configurações padrão do Code OSS para Cloud Workstations

Para informações detalhadas sobre o armazenamento de configurações no Code OSS para Cloud Workstations, consulte Personalizar configurações.

Se você especificar um diretório inicial permanente na configuração das estações de trabalho, é possível configurar as definições padrão do Code OSS para o Cloud Workstations adicionando um script de inicialização que grava as configurações em $HOME/.codeoss-cloudworkstations/data/Machine/settings.json.

Por exemplo, se você quiser definir o tema de cores padrão como "Escuro", estenda a imagem base do editor para incluir o seguinte script em /etc/workstation-startup.d/150_default-ide-color-theme.sh

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

Criar uma imagem de contêiner personalizada

Para informações detalhadas sobre os comandos do Docker, consulte a referência do Docker. Digite o seguinte comando para criar o contêiner:

docker build CUSTOM_IMAGE_FOLDER -t TARGET_IMAGE

Substituir o texto que precede o ícone editar Editar atualiza os outros exemplos nesta página.

Substitua:

  • CUSTOM_IMAGE_FOLDER: o caminho para a pasta que você criou para armazenar a imagem personalizada.
  • TARGET_IMAGE: o caminho da imagem no Artifact Registry.

    Por exemplo, TARGET_IMAGE pode apontar para um caminho de imagem de destino semelhante a este:

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

    Substitua * conforme necessário pelo nome da região e outros identificadores.

Também é possível atualizar a variável de ambiente CLOUD_WORKSTATIONS_CUSTOM_IMAGE para apontar para o repositório.

Para mais informações sobre como armazenar imagens do Docker no Artifact Registry, consulte as seções a seguir:

Hospedar sua imagem de contêiner personalizada

Para hospedar imagens de contêiner personalizadas, recomendamos e oferecemos suporte ao Artifact Registry. Se você usa o GitHub ou qualquer outro repositório público ou privado, o Cloud Workstations pode não funcionar como esperado. Para mais informações, consulte a observação importante na seção Usar uma imagem de contêiner personalizada.

Testar sua imagem de contêiner personalizada

Depois que o contêiner terminar de ser criado, teste-o com o seguinte comando:

docker run --privileged -p LOCAL_PORT:CONTAINER_PORT TARGET_IMAGE

Substitua:

  • LOCAL_PORT: o número da porta local
  • CONTAINER_PORT: o número da porta do contêiner

Por exemplo, substituir LOCAL_PORT:CONTAINER_PORT por 8080:80 atribui a porta 8080 para uso local e a porta 80 para uso no contêiner.

Se você estiver estendendo a imagem do editor de base do Cloud Workstations, execute o comando docker e teste a imagem da estação de trabalho conectando-se a ela pelo navegador local ou executando ssh para se conectar ao contêiner:

  • Se você se conectar pelo navegador, transmita -p 8080:80 para o comando docker run e abra localhost:8080.
  • Se preferir se conectar por SSH, transmita -p 2222:22 ao comando docker run e execute ssh user@localhost -p 2222.

Usar uma imagem de contêiner personalizada

Para usar a imagem de contêiner personalizada depois de criar e testar localmente, envie o contêiner para o Artifact Registry com o seguinte comando:

docker push TARGET_IMAGE

Agora é possível criar uma configuração de estação de trabalho usando a imagem do contêiner que você acabou de criar e enviar.

Para mais informações, consulte Criar um repositório do Docker com o Artifact Registry.

Depurar problemas

Para encontrar e depurar problemas na execução da imagem do contêiner, analise os registros de saída do contêiner das estações de trabalho em execução.

Você é responsável por manter e atualizar pacotes e dependências personalizados adicionados em imagens personalizadas.

Se você estiver criando imagens personalizadas, recomendamos o seguinte:

A seguir