컨테이너 이미지 맞춤설정

Cloud Workstations에서 제공되는 사전 구성된 기본 이미지에는 IDE, 기본 Linux 터미널 및 언어 도구와 sshd 서버의 최소한의 구성만 포함됩니다. 특정 개발 사용 사례의 환경 설정을 촉진하기 위해서는 도구 및 이러한 기본 이미지를 사전 설치 도구 및 종속 항목으로 확장하고 자동화 스크립트를 실행하는 커스텀 컨테이너 이미지를 만들 수 있습니다.

커스텀 컨테이너 이미지의 경우에는 Artifact Analysis와 같은 컨테이너 스캔 도구를 실행해서 추가 종속 항목을 검사하는 것 외에도 Cloud Workstations 기본 이미지가 업데이트될 때 이러한 이미지를 자동으로 다시 빌드하도록 파이프라인을 설정하는 것이 좋습니다. 사용자는 커스텀 이미지에 추가된 커스텀 패키지 및 종속 항목을 유지 보수하고 업데이트해야 합니다.

시작하기 전에

  1. Docker와 같은 컨테이너 이미지를 빌드하고 Google Cloud CLI를 사용해서 이미지를 Artifact Registry(또는 Container Registry)에 내보내기 위한 도구가 포함된 머신이 필요합니다. 이러한 단계를 수행하기 위해서는 도구가 사전 설치된 Cloud Workstations 또는 Cloud Shell Editor를 사용할 수 있습니다.

  2. 지원되는 기본 이미지 목록에서 사용하려는 기본 이미지를 선택합니다(예: us-central1-docker.pkg.dev/cloud-workstations-images/predefined/code-oss:latest).

    또는 자체 컨테이너 이미지 사용 안내에 따라 자체 컨테이너 이미지를 사용하거나 외부 컨테이너 이미지를 사용할 수 있습니다.

  3. CUSTOM_IMAGE_FOLDER와 같은 폴더를 만들고 아래 예시에 표시된 것처럼 선택한 기본 이미지를 확장하여 이 폴더 내에 Dockerfile을 만듭니다.

Cloud Workstations 기본 이미지 구조

Cloud Workstations 기본 이미지는 다음과 같이 정의된 구조를 공유합니다.

  • 기본 이미지 진입점 파일은 /google/scripts/entrypoint.sh로 설정됩니다.
  • 시작 시 기본 이미지는 워크스테이션 환경을 초기화하기 위해 사전 순으로 /etc/workstation-startup.d/*에서 파일을 실행합니다.

    파일 및 해당 동작은 다음과 같습니다.

    • 000_configure-docker.sh: 워크스테이션 내에서 Docker를 구성하고 실행합니다.
    • 010_add-user.sh: Cloud Workstations에서 기본 사용자를 만듭니다.

      영구 디스크가 컨테이너에 동적으로 연결되기 때문에 Dockerfile이 아니라 워크스테이션 시작 시에 사용자를 추가해야 합니다.

    • 020_start-sshd.sh: 컨테이너에서 sshd 서비스를 시작합니다.

    • 110_start-$IDE.sh: 이미지에 대해 IDE를 시작합니다.

  • Cloud Workstations가 /home/.docker_data에서 홈 디렉터리에 Docker 이미지를 저장하므로, 이미지가 세션 간에 보존됩니다.

워크스테이션 시작 중 기능을 추가하려면 /etc/workstation-startup.d/ 디렉터리에 스크립트를 추가합니다.

  • 이 디렉터리의 스크립트는 기본적으로 루트로 실행됩니다. 스크립트를 다른 사용자로 실행하려면 runuser 명령어를 사용합니다.

  • 스크립트가 사전 순으로 실행되기 때문에 200보다 큰 세 자리 숫자를 스크립트에 접두사로 추가하는 것이 좋습니다.

홈 디렉터리 수정

워크스테이션 구성이 영구적인 홈 디렉터리(기본 동작)를 지정하면 홈 디렉터리를 지원하는 영구 디스크가 런타임 시 컨테이너에 동적으로 연결됩니다. 이 프로세스는 컨테이너 이미지 빌드 시간에 /home 디렉터리에 수정된 항목을 덮어씁니다.

업데이트를 보존하려면 /etc/workstation-startup.d 디렉터리에 스크립트를 추가하거나 /etc/profile.d 디렉터리에 사용자별 구성을 추가하여 컨테이너 런타임에 /home 디렉터리를 수정합니다. 프로세스 속도를 높이려면 컨테이너 시작을 차단하지 않도록 앰퍼샌드 &를 명령어 끝에 추가하여 설정 스크립트를 백그라운드 프로세스로 실행하는 것이 좋습니다.

일부 빌드 시간 구성 예시는 컨테이너 런타임으로 이동해야 합니다.

  • 사용자별 git 구성
  • 홈 디렉터리에서 클론된 git 저장소
  • $HOME/.config 디렉터리에 파일 배치와 같은 직접 사용자 구성
  • 사용자 만들기

사용자 만들기 및 수정

영구 디스크가 런타임에 컨테이너에 동적으로 연결되기 때문에 Dockerfile이 아니라 워크스테이션 시작 시에 사용자를 추가해야 합니다. 추가 사용자를 수정하거나 만들려면 /etc/workstation-startup.d/010_add-user.sh를 업데이트하거나 시작 시 실행되는 자체 스크립트를 만드는 것이 좋습니다.

또한 /etc/profile.d에서 파일을 업데이트하여 사용자에 대해 기본 Bash 프로필을 수정할 수 있습니다.

사전 구성된 보안 APT 키 업데이트

Cloud Workstations 기본 이미지에는 보안 APT를 사용하여 다양한 타사 저장소에서 가져온 다양한 도구가 사전 설치되어 있습니다. 설치 프로세스 중에 gpg를 사용해서 저장소 소유자가 제공한 공개 키를 가져오고 /usr/share/keyrings/ 아래에 개별 파일로 배치합니다. 이러한 파일은 /etc/apt/sources.list.d/ 아래의 해당 list 파일에서 참조됩니다. 이를 통해 apt는 특정 저장소와 상호작용할 때 저장소의 무결성을 확인할 수 있습니다.

일부 경우에는 타사 저장소 소유자가 저장소 무결성 검증에 사용되는 공개 키를 변경하도록 결정할 수 있습니다. 그러면 키를 사용할 때 apt에서 오류가 표시됩니다. 이 잠재적 문제를 해결하기 위해서는 사전 설치된 공개 키의 최신 버전을 얻어서 이를 다시 가져오는 /google/scripts/refresh-preinstalled-apt-keys.sh를 사용할 수 있습니다.

설치된 IDE 버전 나열

여러 Cloud Workstations 기본 이미지가 IDE에 사전 설치되어 제공됩니다. 편의를 위해서는 이미지에 설치된 IDE의 이름 및 버전 정보를 나열하는, 포함된 /google/scripts/preinstalled-ide-versions.sh 스크립트를 참조하세요.

sudo 루트 권한 사용 중지

기본 워크스테이션 사용자는 이러한 컨테이너에서 sudo 루트 액세스 권한을 갖습니다. Docker 컨테이너에 대해 루트 액세스 권한을 사용 중지하려면 워크스테이션 구성을 만들 때 CLOUD_WORKSTATIONS_CONFIG_DISABLE_SUDO 환경 변수를 true로 설정합니다.

워크스테이션 구성을 만들 때 Google Cloud 콘솔을 통해 이 환경 변수를 설정하려면 다음 단계를 수행합니다.

  1. 워크스테이션 구성을 만들 때 기본 정보 구성 및 머신 구성을 완료합니다.
  2. 환경 맞춤설정 대화상자에서 고급 컨테이너 옵션 섹션을 확장하고 환경 변수를 선택합니다.
  3. add변수 추가를 클릭합니다.
  4. CLOUD_WORKSTATIONS_CONFIG_DISABLE_SUDOtrue를 값으로 입력합니다.

자체 컨테이너 이미지 사용

또한 Linux를 기반으로 하는 한 자체 컨테이너 이미지 또는 외부 컨테이너 이미지를 사용할 수 있고 컨테이너가 시작될 때 차단 프로세스를 실행할 수 있습니다.

Dockerfile을 설정할 때는 즉시 종료되는 대신 컨테이너가 계속 실행될 수 있도록 ENTRYPOINT 안내에 따라 sleep infinity와 같은 차단 프로세스를 실행해야 합니다. 또는 워크스테이션 구성에서 차단 프로세스를 지정하도록 config.container.args 필드를 설정할 수 있습니다.

자체 컨테이너 이미지를 사용할 때는 다음을 참조하세요.

  • Cloud Workstations는 Cloud Workstations 기본 이미지의 추가 스크립트가 필요하지 않습니다.

    하지만 Cloud Workstations 기본 이미지를 실행하는 컨테이너 내에서 /etc/workstation-startup.d/ 디렉터리의 스크립트를 확인합니다. 파일 이름은 각 스크립트가 수행하는 기능을 나타냅니다.

  • 컨테이너에서 SSH 서버를 실행하는 것이 좋습니다. Cloud Workstations에서 기본적으로 이를 설정하는 방법을 보려면 기본 이미지에서 /etc/workstation-startup.d/020_start-sshd.sh를 참조하세요.

  • 기본 IDE 또는 웹 서버를 포트 80으로 실행하는 것이 좋습니다.

Cloud Workstations 기본 이미지 확장

워크스테이션 환경에 대해 커스텀 이미지를 만들도록 Cloud Workstations 기본 이미지를 확장할 때는 세 가지 접근 방법을 따를 수 있습니다.

  1. 추가하려는 정적 자산을 포함하도록 Dockerfile을 업데이트합니다.
  2. /etc/workstation-startup.d/ 아래에 실행 파일을 추가하여 실행 컨테이너를 맞춤설정합니다. 이 디렉터리 아래의 파일은 컨테이너 시작 시 사전 순으로 자동으로 실행되므로 워크스테이션 시작 중 적절한 시간에 실행되도록 파일 이름을 접두사로 추가할 수 있습니다.
  3. 컨테이너 시작을 완전히 맞춤설정하도록 Dockerfile에서 ENTRYPOINT를 재정의합니다.

샘플 커스텀 Dockerfile

이 섹션에서는 자체 Dockerfile을 만들기 위한 시나리오 예시와 안내를 제공합니다.

emacs가 사전 설치된 컨테이너 이미지

emacs가 사전 설치된 컨테이너를 만들려면 다음 명령어를 실행합니다.

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

RUN sudo apt update
RUN sudo apt install -y emacs

사용자 맞춤설정이 포함된 컨테이너 이미지

컨테이너 이미지를 맞춤설정하려면 다음 단계를 따르세요.

  1. /etc/workstation-startup.d/*에서 010_add-user.sh 뒤에 실행되는 스크립트를 만듭니다. 예를 들면 011_customize-user.sh입니다.

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

    $GROUP을 새 그룹 이름으로 바꾸고 $USERNAME을 사용자 이름으로 바꿉니다.

  2. 스크립트 이름을 011_customize-user.sh로 지정했다고 가정하고 Dockerfile에서 이미지에 다음을 추가하고 이를 실행 가능하게 만듭니다.

    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
    

SSH 세션에서 컨테이너 환경 변수를 설정하는 컨테이너 이미지

워크스테이션 구성이나 워크스테이션 수준에서 설정된 환경 변수가 진입점 명령어를 통해 직접 하위 프로세스에 전달됩니다. 여기에는 사전 구성된 기본 이미지의 IDE가 포함됩니다. 하지만 SSH 세션은 진입점의 하위 프로세스가 아니며 이러한 커스텀 환경 변수가 설정되지 않았습니다.

SSH 세션에서 이러한 환경 변수를 설정하려면 이러한 환경 변수를 컨테이너의 진입점 명령어에서 /etc/environment 파일로 릴레이하는 커스텀 컨테이너 이미지를 설정합니다.

이를 달성하려면 다음 단계를 수행합니다.

  1. /etc/workstation-startup.d/*에서 010_add-user.sh 뒤에 실행되는 스크립트를 만듭니다. 예를 들면 011_add-ssh-env-variables.sh입니다.

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

    CUSTOM_ENV_VAR를 원하는 환경 변수 이름으로 바꿉니다.

  2. 스크립트 이름을 011_add-ssh-env-variables.sh로 지정했다고 가정하고 Dockerfile에서 이미지에 다음을 추가하고 이를 실행 가능하게 만듭니다.

    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
    

SSH 세션에 X11 전달을 사용 설정하는 컨테이너 이미지

X11 전달을 사용하면 원격 애플리케이션을 시작하고 애플리케이션 표시를 로컬 머신으로 전달할 수 있습니다.

X11 전달을 사용 설정하는 컨테이너 이미지를 만들려면 X11Forwarding yes(X11 전달 허용) 및 AddressFamily inet(IPv4만 사용되도록 보장)을 추가하여 Cloud Workstations 기본 이미지에서 제공된 OpenSSH 데몬 구성 파일(/etc/ssh/sshd_config)을 수정합니다. 이러한 키워드에 대한 자세한 내용은 AddressFamilyX11Forwarding에 대한 OpenBSD 웹페이지를 참조하세요.

다음은 필요한 수정을 수행하는 샘플 Dockerfile입니다.

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에 IDE 확장 프로그램을 사전 설치하는 컨테이너 이미지

빌드 시 Java 개발용 Code OSS for Cloud Workstations에 IDE 확장 프로그램을 사전 설치하는 컨테이너 이미지를 만들려면 다음 명령어를 실행합니다.

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

확장 프로그램을 사전 설치하면 기본 제공 확장 프로그램으로 간주됩니다. 이러한 확장 프로그램은 업데이트할 수 없으며 Extensions Marketplace의 설치된 섹션에 표시되지 않을 수 있습니다. 하지만 @builtin을 검색하여 기본 제공 확장 프로그램을 찾을 수 있습니다.

시작 시 확장 프로그램을 설치하는 또 다른 방법은 시작 스크립트를 실행하는 것입니다. 예를 들어 /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

이 메서드를 사용하면 확장 프로그램이 Extensions Marketplace에 표시되고 여기에서 업데이트할 수 있습니다.

JetBrains IDE 및 플러그인을 기본 이미지에 설치

워크스테이션 구성을 위해 Docker 이미지를 맞춤설정할 때는 JetBrains IDE 및 플러그인(예: IntelliJ용 Cloud Code)을 기본 이미지에 설치할 수 있습니다. JetBrains 제품에 대한 Cloud Workstations 기본 이미지에는 다음과 같은 스크립트가 포함되어 있습니다.

  • jetbrains-installer.sh: JetBrains IDE를 설치합니다.
  • plugin-installer.sh: IntelliJ용 Cloud Code와 같은 플러그인을 설치합니다.

필요에 따라 이러한 스크립트를 사용해서 기본 이미지를 맞춤설정하거나, 시작 스크립트로 호출하거나, 워크스테이션 시작 후에 실행합니다.

설치 프로그램 스크립트

jetbrains-installer.shplugin-installer.sh 스크립트의 소스 파일을 보려면 JetBrains 사전 정의 이미지 중 하나를 사용하는 워크스테이션 구성을 사용하여 워크스테이션을 시작하고, JetBrains Gateway 또는 SSH를 통해 워크스테이션에 연결한 후 루트 디렉터리에 있는 installer-scripts 디렉터리에서 스크립트 파일을 찾아봅니다.

컨테이너 빌드 시 이러한 스크립트를 실행하는 것이 좋습니다. 이미 시작된 워크스테이션에서 실행하지 마세요.

플러그인 설치 프로그램 스크립트 사용

plugin-installer.sh 스크립트에는 다음 문법이 사용됩니다.

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

다음을 바꿉니다.

  • VERSION: 설치할 플러그인의 버전 번호(선택사항)입니다.
  • DESTINATION-DIRECTORY: 플러그인을 설치할 디렉터리(선택사항)입니다. 지정하지 않으면 작업 디렉터리가 사용됩니다.
  • CHECKSUM: 요청된 플러그인의 SHA-256 체크섬(선택사항)입니다.
  • -f: 지정된 경우 기존 플러그인을 덮어씁니다.
  • PLUGIN_ID: JetBrains 마켓플레이스에서 가져온 필요한 숫자 플러그인 식별자입니다. 예를 들어 Dart를 추가하려면 PLUGIN_ID로 6351를 사용합니다. IntelliJ용 Cloud Code를 추가하려면 8079를 PLUGIN_ID로 사용합니다.

예를 들어 IntelliJ에서 Dart 플러그인의 최신 버전을 설치하려면 다음 명령어를 실행합니다.

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

JetBrains 설치 프로그램 스크립트 사용

JetBrains IDE의 사전 구성된 기본 이미지를 확장할 때 JetBrains 설치 프로그램 스크립트를 사용하는 것이 좋습니다.

jetbrains-installer.sh 스크립트에는 다음 문법이 사용됩니다.

jetbrains-installer.sh IDE [ pinned|latest ]

다음을 바꿉니다.

  • IDE: 설치할 JetBrains IDE입니다. 다음 IDE 약어 중 하나를 사용해야 합니다.

    IDE 설치된 제품
    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: 선택사항 - 고정된 버전 또는 최신 버전의 IDE를 사용합니다. 기본값은 latest입니다.

예를 들어 최신 버전의 CLion을 설치하려면 다음 명령어를 실행합니다.

jetbrains-installer.sh clion

JetBrains IDE 구성 파일 맞춤설정

영구적인 홈 디렉터리가 워크스테이션 구성에 지정된 경우 JetBrains IDE가 있는 Cloud Workstations 기본 이미지가 $IDE.vmoptions$IDE.properties 구성 파일을 자동으로 유지합니다. 이러한 파일의 기본 위치를 재정의하려면 CLOUD_WORKSTATIONS_JETBRAINS_PERISTED_CONFIG_DIR 환경 변수를 지정합니다.

자세한 내용은 Cloud Workstations가 기본적으로 이를 설정하는 방법을 알아보려면 모든 JetBrains 기본 이미지/etc/workstation-startup.d/120_persist-jetbrains-configs.sh를 참조하세요.

IntelliJ용 Cloud Code를 사용하여 기본 Docker 이미지 확장

다음 Dockerfile 스니펫은 8079를 필요한 플러그인 식별자로 포함하여 IntelliJ용 Cloud Code를 사용해서 기본 Docker 이미지를 확장합니다. 또한 이 예시는 선택적으로 version 22.9.3-222를 버전 번호로 지정하고, /opt/ideaIU/plugins/를 대상 디렉터리로 지정하고, 89628279ed9042c526a81facc09bf53f8fb8b83b4595b0d329d94c1611e0c379를 체크섬으로 지정합니다.

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

Code OSS for Cloud Workstations에 추가 IDE 확장 프로그램 설치

Open VSX Registry에서 추가 IDE 확장 프로그램을 찾습니다. 또한 모든 확장의 다운로드 링크에서 URL을 복사하여 .vsix 파일의 URL을 찾을 수 있습니다.

다운로드 버튼을 표시하는 Go 언어 확장 프로그램의 VSX 페이지를 엽니다.

워크스테이션에서 Extensions Marketplace를 열면 다운로드 대신 설치가 표시됩니다.

Code OSS for Cloud Workstations 기본 설정

Code OSS for Cloud Workstations에서 설정 스토리지에 대한 자세한 내용은 설정 맞춤설정을 참조하세요.

워크스테이션 구성에 영구 홈 디렉터리를 지정하는 경우 $HOME/.codeoss-cloudworkstations/data/Machine/settings.json에 설정을 작성하는 시작 스크립트를 추가하여 Code OSS for Cloud Workstations 기본 설정을 구성할 수 있습니다.

예를 들어 기본 색상 테마를 어두운 색으로 설정하려면 /etc/workstation-startup.d/150_default-ide-color-theme.sh 아래에 다음 스크립트를 포함하도록 기본 편집기 이미지를 확장합니다.

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

커스텀 컨테이너 이미지 빌드

Docker 명령어에 대한 자세한 내용은 Docker 참조를 확인하세요. 다음 명령어를 입력하여 컨테이너를 빌드합니다.

docker build CUSTOM_IMAGE_FOLDER -t TARGET_IMAGE

edit 수정 아이콘 앞에 있는 텍스트를 바꾸면 이 페이지의 다른 예시가 업데이트됩니다.

다음을 바꿉니다.

  • CUSTOM_IMAGE_FOLDER: 커스텀 이미지를 저장하기 위해 만든 폴더의 경로입니다.
  • TARGET_IMAGE: Artifact Registry(또는 Container Registry)의 이미지 경로입니다.

    예를 들어 TARGET_IMAGE는 다음 경로 중 하나와 비슷하게 대상 이미지 경로를 가리킬 수 있습니다.

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

    필요에 따라 *를 리전 및 추가 식별자 이름으로 바꿉니다.

저장소를 가리키도록 CLOUD_WORKSTATIONS_CUSTOM_IMAGE 환경 변수를 업데이트할 수도 있습니다.

Artifact Registry에 Docker 이미지를 저장하는 방법은 다음 섹션을 참조하세요.

커스텀 컨테이너 이미지 호스팅

커스텀 컨테이너 이미지를 호스팅하려면 Artifact Registry를 사용하는 것이 좋습니다. GitHub 또는 다른 공개 또는 비공개 저장소를 사용하는 경우 Cloud Workstation이 예상대로 작동하지 않을 수 있습니다. 자세한 내용은 커스텀 컨테이너 이미지 사용 섹션의 중요 사항을 참조하세요.

커스텀 컨테이너 이미지 테스트

컨테이너 빌드가 완료된 후 다음 명령어를 사용해서 테스트할 수 있습니다.

docker run --privileged -p LOCAL_PORT:CONTAINER_PORT TARGET_IMAGE

다음을 바꿉니다.

  • LOCAL_PORT: 로컬 포트 번호
  • CONTAINER_PORT: 컨테이너 포트 번호

예를 들어 LOCAL_PORT:CONTAINER_PORT8080:80으로 바꾸면 로컬 사용을 위해 포트 8080이 할당되고 컨테이너 사용을 위해 포트 80이 할당됩니다.

Cloud Workstations 기본 편집기 이미지를 확장하는 경우 docker 명령어를 실행한 후 로컬 브라우저를 통해 워크스테이션에 연결하거나 컨테이너 연결을 위해 ssh를 실행하여 워크스테이션 이미지를 테스트합니다.

  • 브라우저를 통해 연결하는 경우 -p 8080:80docker run 명령어에 전달한 후 localhost:8080을 열어야 합니다.
  • SSH를 통한 연결을 선호할 경우 -p 2222:22docker run 명령어에 전달한 후 ssh user@localhost -p 2222를 실행합니다.

커스텀 컨테이너 이미지 사용

로컬 빌드 및 테스트를 완료한 후 커스텀 컨테이너 이미지를 사용하려면 다음 명령어를 사용해서 컨테이너를 Artifact Registry(또는 Container Registry)로 내보냅니다.

docker push TARGET_IMAGE

이제 바로 전에 만들고 내보낸 컨테이너 이미지를 사용해서 워크스테이션 구성을 만들 수 있습니다.

자세한 내용은 Artifact Registry로 Docker 저장소 만들기를 참조하세요.

문제 디버그

컨테이너 이미지 실행 중 문제를 찾아서 디버그하려면 실행 중인 워크스테이션에서 컨테이너 출력 로그를 검토합니다.

커스텀 이미지에 추가된 커스텀 패키지 및 종속 항목을 사용자가 유지 보수하고 업데이트해야 합니다.

커스텀 이미지를 만들 때 권장사항은 다음과 같습니다.

다음 단계