Cloud Workstations에서 제공되는 사전 구성된 기본 이미지에는 IDE, 기본 Linux 터미널 및 언어 도구와 sshd 서버의 최소한의 구성만 포함됩니다. 특정 개발 사용 사례의 환경 설정을 촉진하기 위해서는 도구 및 이러한 기본 이미지를 사전 설치 도구 및 종속 항목으로 확장하고 자동화 스크립트를 실행하는 커스텀 컨테이너 이미지를 만들 수 있습니다.
커스텀 컨테이너 이미지의 경우에는 Artifact Analysis와 같은 컨테이너 스캔 도구를 실행해서 추가 종속 항목을 검사하는 것 외에도 Cloud Workstations 기본 이미지가 업데이트될 때 이러한 이미지를 자동으로 다시 빌드하도록 파이프라인을 설정하는 것이 좋습니다. 사용자는 커스텀 이미지에 추가된 커스텀 패키지 및 종속 항목을 유지 보수하고 업데이트해야 합니다.
시작하기 전에
Docker와 같은 컨테이너 이미지를 빌드하고 Google Cloud CLI를 사용해서 이미지를 Artifact Registry에 내보내기 위한 도구가 포함된 머신이 필요합니다. 이러한 단계를 수행하기 위해서는 도구가 사전 설치된 Cloud Workstations 또는 Cloud Shell Editor를 사용할 수 있습니다.
지원되는 기본 이미지 목록에서 사용하려는 기본 이미지를 선택합니다(예:
us-central1-docker.pkg.dev/cloud-workstations-images/predefined/code-oss:latest).또는 자체 컨테이너 이미지 사용 안내에 따라 자체 컨테이너 이미지를 사용하거나 외부 컨테이너 이미지를 사용할 수 있습니다.
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서비스를 시작합니다.030_customize-environment.sh:/home/user/.workstation/customize_environment을user로 실행합니다.110_start-$IDE.sh: 이미지에 대해 IDE를 시작합니다.
Cloud Workstations가
/home/.docker_data에서 홈 디렉터리에 Docker 이미지를 저장하므로, 이미지가 세션 간에 보존됩니다.
워크스테이션 시작 중 기능을 추가하려면 /etc/workstation-startup.d/ 디렉터리에 스크립트를 추가합니다.
이 디렉터리의 스크립트는 기본적으로 루트로 실행됩니다. 스크립트를 다른 사용자로 실행하려면
runuser명령어를 사용합니다.스크립트가 사전 순으로 실행되기 때문에 200보다 큰 세 자리 숫자를 스크립트에 접두사로 추가하는 것이 좋습니다.
또는 워크스테이션 이미지를 확장하지 않으려면 홈 디렉터리에 customize_environment 스크립트를 만들면 됩니다.
홈 디렉터리 수정
워크스테이션 구성이 영구적인 홈 디렉터리(기본 동작)를 지정하면 홈 디렉터리를 지원하는 영구 디스크가 런타임 시 컨테이너에 동적으로 연결됩니다. 이 프로세스는 컨테이너 이미지 빌드 시간에 /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를 사용할 수 있습니다.
apt-get update을 실행하기 전에 맞춤 Dockerfile에서 이 스크립트를 직접 실행할 수도 있습니다.
# Refresh the preinstalled APT keys
RUN /google/scripts/refresh-preinstalled-apt-keys.sh
RUN apt-get update
설치된 IDE 버전 나열
여러 Cloud Workstations 기본 이미지가 IDE에 사전 설치되어 제공됩니다. 편의를 위해서는 이미지에 설치된 IDE의 이름 및 버전 정보를 나열하는, 포함된 /google/scripts/preinstalled-ide-versions.sh 스크립트를 참조하세요.
sudo 루트 권한 사용 중지
기본 워크스테이션 사용자는 이러한 컨테이너에서 sudo 루트 액세스 권한을 갖습니다. Docker 컨테이너에 대해 루트 액세스 권한을 사용 중지하려면 워크스테이션 구성을 만들 때 CLOUD_WORKSTATIONS_CONFIG_DISABLE_SUDO 환경 변수를 true로 설정합니다.
워크스테이션 구성을 만들 때 Google Cloud 콘솔을 통해 이 환경 변수를 설정하려면 다음 단계를 따르세요.
- 워크스테이션 구성을 만들 때 기본 정보 구성 및 머신 구성을 완료합니다.
- 환경 맞춤설정 대화상자에서 고급 컨테이너 옵션 섹션을 확장하고 환경 변수를 선택합니다.
- add변수 추가를 클릭합니다.
CLOUD_WORKSTATIONS_CONFIG_DISABLE_SUDO및true를 값으로 입력합니다.
이미지를 확장하지 않고 맞춤설정
편의를 위해 모든 Cloud Workstations 기본 이미지는 /home/user/.workstation/customize_environment에 있는 실행 파일의 존재를 확인하고, 있는 경우 백그라운드에서 user로 실행합니다. 이를 통해 시작 시 스크립트나 바이너리를 실행할 수 있습니다. .profile 또는 .bashrc와 달리 이 스크립트는 셸이 로그인될 때마다 한 번이 아닌 워크스테이션이 시작될 때 한 번만 실행됩니다.
customize_environment 스크립트는 user로 실행되므로 스크립트를 작성할 때 필요에 따라 권한을 업데이트해야 합니다. 예를 들어 워크스테이션이 시작될 때마다 Emacs를 설치하려면 customize_environment의 콘텐츠가 다음과 유사할 수 있습니다.
#!/bin/bash
sudo apt-get update
sudo apt-get install -y emacs
customize_environment의 실행 로그는 /var/log/customize_environment의 컨테이너에서 확인할 수 있으며 컨테이너 출력 로그에도 작성됩니다.
customize_environment이 성공적으로 실행되면 /var/run/customize_environment_done에 파일이 생성됩니다. customize_environment는 워크스테이션 시작과 동시에 실행되므로 스크립트로 설치된 패키지는 워크스테이션이 시작된 후 몇 분 이내에 사용할 수 있습니다.
유휴 시간 제한 방지
편의를 위해 모든 Cloud Workstations 기본 이미지에는 /google/scripts/keep_alive.sh에 사전 설치된 스크립트가 포함되어 있습니다. 이 스크립트는 정기적인 연결 유지 메시지를 전송하므로 직접 상호작용 없이 백그라운드 프로세스를 실행할 때 워크스테이션이 유휴 시간 제한으로 종료되지 않도록 할 수 있습니다.
자체 컨테이너 이미지 사용
또한 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으로 실행하는 것이 좋습니다.
Google Cloud 은 완전한 커스텀 컨테이너 이미지를 빌드하는 데 사용할 수 있는 표준 기본 이미지를 제공합니다.
Cloud Workstations 기본 이미지 확장
워크스테이션 환경에 대해 커스텀 이미지를 만들도록 Cloud Workstations 기본 이미지를 확장할 때는 세 가지 접근 방법을 따를 수 있습니다.
- 추가하려는 정적 자산을 포함하도록
Dockerfile을 업데이트합니다. /etc/workstation-startup.d/아래에 실행 파일을 추가하여 실행 컨테이너를 맞춤설정합니다. 이 디렉터리 아래의 파일은 컨테이너 시작 시 사전 순으로 자동으로 실행되므로 워크스테이션 시작 중 적절한 시간에 실행되도록 파일 이름을 접두사로 추가할 수 있습니다.- 컨테이너 시작을 완전히 맞춤설정하도록 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
사용자 맞춤설정이 포함된 컨테이너 이미지
컨테이너 이미지를 맞춤설정하려면 다음 단계를 따르세요.
/etc/workstation-startup.d/*에서