InfoGrab Docs

워크스페이스 구성

요약

워크스페이스를 사용하여 GitLab 프로젝트를 위한 격리된 개발 환경을 만들고 관리할 수 있습니다. 워크스페이스를 만들기 전에 인프라를 한 번만 설정해야 합니다. AWS를 사용하는 경우 OpenTofu 튜토리얼을 사용할 수 있습니다.

히스토리

워크스페이스를 사용하여 GitLab 프로젝트를 위한 격리된 개발 환경을 만들고 관리할 수 있습니다. 각 워크스페이스에는 자체 종속성, 라이브러리 및 도구 세트가 포함되어 있으며 각 프로젝트의 특정 요구 사항에 맞게 사용자 정의할 수 있습니다.

워크스페이스 인프라 설정#

워크스페이스를 만들기 전에 인프라를 한 번만 설정해야 합니다. 클라우드 공급자와 관계없이 워크스페이스를 위한 인프라를 설정하려면 다음을 수행해야 합니다:

  1. Kubernetes용 GitLab 에이전트가 지원하는 Kubernetes 클러스터를 설정합니다. 지원되는 Kubernetes 버전을 참조하세요.
  2. Kubernetes 클러스터에 대한 오토스케일링이 활성화되어 있는지 확인합니다.
  3. Kubernetes 클러스터에서:
    1. 각 워크스페이스에 대해 볼륨을 동적으로 프로비저닝할 수 있도록 기본 스토리지 클래스가 정의되어 있는지 확인합니다.
  4. 튜토리얼: Kubernetes용 GitLab 에이전트 설정의 모든 단계를 완료합니다.
  5. 선택 사항. 워크스페이스에서 컨테이너 빌드 및 실행.
  6. 선택 사항. 프라이빗 컨테이너 레지스트리 지원 구성.
  7. 선택 사항. 워크스페이스에 대한 sudo 접근 구성.

AWS를 사용하는 경우 OpenTofu 튜토리얼을 사용할 수 있습니다. 자세한 내용은 튜토리얼: AWS에서 워크스페이스 인프라 설정을 참조하세요.

워크스페이스 만들기#

히스토리
  • 자동 종료 전 시간 GitLab 16.0에서 도입
  • 비공개 프로젝트 지원 GitLab 16.4에서 도입.
  • Git 참조Devfile 위치 GitLab 16.10에서 도입.
  • 자동 종료 전 시간 GitLab 16.10에서 워크스페이스 자동 종료 시간으로 이름 변경.
  • 변수 GitLab 17.1에서 도입.
  • 워크스페이스 자동 종료 시간 GitLab 17.6에서 제거.
  • 머지 리퀘스트 페이지에서 워크스페이스 만들기 GitLab 18.0에서 도입.
Warning

신뢰할 수 있는 프로젝트에서만 워크스페이스를 만드세요.

사전 요구 사항:

  1. 상단 표시줄에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 코드 > 새 워크스페이스를 선택합니다.
  3. 클러스터 에이전트 드롭다운 목록에서 프로젝트가 속한 그룹이 소유한 클러스터 에이전트를 선택합니다.
  4. Git 참조 드롭다운 목록에서 GitLab이 워크스페이스를 만드는 데 사용하는 브랜치, 태그 또는 커밋 해시를 선택합니다. 기본적으로 현재 보고 있는 브랜치입니다.
  5. Devfile 드롭다운 목록에서 다음 중 하나를 선택합니다:
  6. 변수에서 워크스페이스에 주입할 환경 변수의 키와 값을 입력합니다. 새 변수를 추가하려면 변수 추가를 선택합니다.
  7. 워크스페이스 만들기를 선택합니다.
  1. 상단 표시줄에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 코드 > 머지 리퀘스트를 선택합니다.
  3. 워크스페이스를 만들 머지 리퀘스트를 선택합니다.
  4. 코드 > 워크스페이스에서 열기를 선택합니다.
  5. 클러스터 에이전트 드롭다운 목록에서 프로젝트가 속한 그룹이 소유한 클러스터 에이전트를 선택합니다.
  6. Git 참조 드롭다운 목록에서 GitLab이 워크스페이스를 만드는 데 사용하는 브랜치, 태그 또는 커밋 해시를 선택합니다. 기본적으로 머지 리퀘스트의 소스 브랜치입니다.
  7. Devfile 드롭다운 목록에서 다음 중 하나를 선택합니다:
  8. 변수에서 워크스페이스에 주입할 환경 변수의 키와 값을 입력합니다. 새 변수를 추가하려면 변수 추가를 선택합니다.
  9. 워크스페이스 만들기를 선택합니다.

워크스페이스를 시작하는 데 몇 분이 걸릴 수 있습니다. 워크스페이스를 열려면 미리보기에서 워크스페이스를 선택합니다. 터미널에 접근하고 필요한 종속성을 설치할 수도 있습니다.

워크스페이스 시작 진행 상황 모니터링#

워크스페이스를 시작하면 워크스페이스 로그를 확인하여 초기화 작업 및 postStart 이벤트의 진행 상황을 모니터링할 수 있습니다. 자세한 내용은 워크스페이스 로그 디렉토리를 참조하세요.

플랫폼 호환성#

워크스페이스의 플랫폼 요구 사항은 개발 요구 사항에 따라 다릅니다.

기본 워크스페이스 기능의 경우, 워크스페이스는 기본 운영 체제와 관계없이 Kubernetes용 GitLab 에이전트를 지원하는 모든 linux/amd64 Kubernetes 클러스터에서 실행됩니다.

플랫폼 요구 사항에 맞는 방법을 선택하려면 워크스페이스에 대한 sudo 접근 구성을 참조하세요.

워크스페이스에서 컨테이너 빌드 및 실행#

히스토리

개발 환경은 런타임 중 종속성을 관리하고 사용하기 위해 컨테이너를 빌드하고 실행해야 하는 경우가 많습니다. 워크스페이스에서 컨테이너를 빌드하고 실행하려면 워크스페이스에 대한 sudo 접근 구성을 참조하세요.

프라이빗 컨테이너 레지스트리 지원 구성#

히스토리

프라이빗 컨테이너 레지스트리의 이미지를 사용하려면:

  1. Kubernetes에서 이미지 풀 시크릿을 만듭니다.
  2. 이 시크릿의 namenamespaceKubernetes용 GitLab 에이전트 구성에 추가합니다.

자세한 내용은 image_pull_secrets를 참조하세요.

워크스페이스에 대한 sudo 접근 구성#

히스토리

개발 환경은 런타임 중 종속성을 설치, 구성 및 사용하기 위해 sudo 권한이 필요한 경우가 많습니다. 플랫폼 요구 사항에 맞는 방법을 선택하세요:

방법 플랫폼 요구 사항 사용법
Sysbox 최신 정보는 Sysbox 배포 호환성 매트릭스를 참조하세요. 컨테이너 격리를 개선하고 컨테이너가 가상 머신과 동일한 워크로드를 실행할 수 있게 합니다.
Kata Containers 최신 정보는 Kata Containers 설치 가이드를 참조하세요. 경량 VM이 컨테이너처럼 작동하지만 향상된 워크로드 격리 및 보안을 제공합니다.
사용자 네임스페이스 Kubernetes 버전 1.33 이상에서는 기본적으로 활성화된 Kubernetes 기능 게이트 뒤에 사용자 네임스페이스가 있습니다. 최신 정보는 Kubernetes 기능 게이트를 참조하세요. 추가 런타임 설치가 필요하지 않습니다. 향상된 보안을 위해 컨테이너 사용자를 호스트 사용자로부터 격리합니다.

사전 요구 사항:

  • 컨테이너 이미지가 임의 사용자 ID를 지원해야 합니다. sudo 접근이 구성되어 있어도 devfile에 사용된 컨테이너 이미지는 사용자 ID 0으로 실행될 수 없습니다.

Sysbox 사용#

Sysbox는 컨테이너 격리를 개선하고 컨테이너가 가상 머신과 동일한 워크로드를 실행할 수 있게 하는 컨테이너 런타임입니다.

Sysbox로 sudo 접근을 구성하려면:

  1. Kubernetes 클러스터에서 Sysbox를 설치합니다.

  2. Kubernetes용 GitLab 에이전트를 구성합니다:

    • 기본 런타임 클래스를 설정합니다. default_runtime_class에서 Sysbox에 대한 런타임 클래스를 입력합니다. 예: sysbox-runc.
    • 권한 상승을 활성화합니다. allow_privilege_escalationtrue로 설정합니다.
    • Sysbox에서 요구하는 어노테이션을 구성합니다. annotations{"io.kubernetes.cri-o.userns-mode": "auto:size=65536"}으로 설정합니다.

Kata Containers 사용#

Kata Containers는 컨테이너처럼 동작하지만 가상 머신의 워크로드 격리 및 보안을 제공하는 경량 가상 머신의 표준 구현입니다.

Kata Containers로 sudo 접근을 구성하려면:

  1. Kubernetes 클러스터에서 Kata Containers를 설치합니다.

  2. Kubernetes용 GitLab 에이전트를 구성합니다:

    • 기본 런타임 클래스를 설정합니다. default_runtime_class에서 Kata Containers에 대한 런타임 클래스를 입력합니다. 예: kata-qemu.
    • 권한 상승을 활성화합니다. allow_privilege_escalationtrue로 설정합니다.

사용자 네임스페이스 사용#

사용자 네임스페이스는 컨테이너 사용자를 호스트 사용자로부터 격리합니다.

사용자 네임스페이스로 sudo 접근을 구성하려면:

  1. Kubernetes 클러스터에서 사용자 네임스페이스를 구성합니다.

  2. Kubernetes용 GitLab 에이전트를 구성합니다:

SSH로 워크스페이스에 연결#

히스토리

사전 요구 사항:

SSH 클라이언트로 워크스페이스에 연결하려면:

  1. gitlab-workspaces-proxy-ssh 서비스의 외부 IP 주소를 가져옵니다:

    kubectl -n gitlab-workspaces get service gitlab-workspaces-proxy-ssh
    
  2. 워크스페이스 이름을 가져옵니다:

    1. 상단 표시줄에서 검색 또는 이동을 선택합니다.
    2. 내 작업을 선택합니다.
    3. 워크스페이스를 선택합니다.
    4. 연결할 워크스페이스의 이름을 복사합니다.
  3. 다음 명령을 실행합니다:

    ssh <workspace_name>@<ssh_proxy_IP_address>
    
  4. 비밀번호의 경우 최소 read_api 범위의 개인 액세스 토큰을 입력합니다.

TCP 로드 밸런서를 통해 gitlab-workspaces-proxy에 연결하면 gitlab-workspaces-proxy가 사용자 이름 (워크스페이스 이름)을 검사하고 GitLab과 상호 작용하여 다음을 확인합니다:

  • 개인 액세스 토큰
  • 워크스페이스에 대한 사용자 접근 권한

워크스페이스 컨테이너 이미지 업데이트#

사용자 정의 워크스페이스 이미지를 두 가지 방법으로 업데이트할 수 있습니다.

워크스페이스 이미지가 워크스페이스 기본 이미지를 기반으로 하는 경우 SSH 지원이 이미 구성되어 있으므로 바로 사용할 수 있습니다. 이 방법은 이미지에 필요한 모든 워크스페이스 구성이 포함되어 있음을 보장합니다. 자세한 지침은 사용자 정의 워크스페이스 이미지 만들기를 참조하세요.

워크스페이스 기본 이미지를 사용하지 않으려면 자체 기본 이미지에서 빌드할 수 있습니다. 이 경우 런타임 이미지에서 SSH 지원을 수동으로 구성합니다:

  1. 런타임 이미지에 sshd를 설치합니다.
  2. 비밀번호 없이 컨테이너에 접근을 허용하는 gitlab-workspaces라는 사용자를 만듭니다.

다음은 SSH 구성 예시입니다:

FROM golang:1.20.5-bullseye

# `openssh-server` 및 기타 종속성 설치
RUN apt update \
    && apt upgrade -y \
    && apt install openssh-server sudo curl git wget software-properties-common apt-transport-https --yes \
    && rm -rf /var/lib/apt/lists/*

# 빈 비밀번호 허용
RUN sed -i 's/nullok_secure/nullok/' /etc/pam.d/common-auth
RUN echo "PermitEmptyPasswords yes" >> /etc/ssh/sshd_config

# 워크스페이스 호스트 키 생성
RUN ssh-keygen -A
RUN chmod 775 /etc/ssh/ssh_host_rsa_key && \
    chmod 775 /etc/ssh/ssh_host_ecdsa_key && \
    chmod 775 /etc/ssh/ssh_host_ed25519_key

# `gitlab-workspaces` 사용자 만들기
RUN useradd -l -u 5001 -G sudo -md /home/gitlab-workspaces -s /bin/bash gitlab-workspaces
RUN passwd -d gitlab-workspaces
ENV HOME=/home/gitlab-workspaces
WORKDIR $HOME
RUN mkdir -p /home/gitlab-workspaces && chgrp -R 0 /home && chmod -R g=u /etc/passwd /etc/group /home

# `/etc/shadow`에 대한 로그인 접근 허용
RUN chmod 775 /etc/shadow

USER gitlab-workspaces

관련 주제#

워크스페이스 구성

Tier: Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

워크스페이스를 사용하여 GitLab 프로젝트를 위한 격리된 개발 환경을 만들고 관리할 수 있습니다. 워크스페이스를 만들기 전에 인프라를 한 번만 설정해야 합니다. AWS를 사용하는 경우 OpenTofu 튜토리얼을 사용할 수 있습니다.

히스토리

워크스페이스를 사용하여 GitLab 프로젝트를 위한 격리된 개발 환경을 만들고 관리할 수 있습니다. 각 워크스페이스에는 자체 종속성, 라이브러리 및 도구 세트가 포함되어 있으며 각 프로젝트의 특정 요구 사항에 맞게 사용자 정의할 수 있습니다.

워크스페이스 인프라 설정#

워크스페이스를 만들기 전에 인프라를 한 번만 설정해야 합니다. 클라우드 공급자와 관계없이 워크스페이스를 위한 인프라를 설정하려면 다음을 수행해야 합니다:

  1. Kubernetes용 GitLab 에이전트가 지원하는 Kubernetes 클러스터를 설정합니다. 지원되는 Kubernetes 버전을 참조하세요.
  2. Kubernetes 클러스터에 대한 오토스케일링이 활성화되어 있는지 확인합니다.
  3. Kubernetes 클러스터에서:
    1. 각 워크스페이스에 대해 볼륨을 동적으로 프로비저닝할 수 있도록 기본 스토리지 클래스가 정의되어 있는지 확인합니다.
  4. 튜토리얼: Kubernetes용 GitLab 에이전트 설정의 모든 단계를 완료합니다.
  5. 선택 사항. 워크스페이스에서 컨테이너 빌드 및 실행.
  6. 선택 사항. 프라이빗 컨테이너 레지스트리 지원 구성.
  7. 선택 사항. 워크스페이스에 대한 sudo 접근 구성.

AWS를 사용하는 경우 OpenTofu 튜토리얼을 사용할 수 있습니다. 자세한 내용은 튜토리얼: AWS에서 워크스페이스 인프라 설정을 참조하세요.

워크스페이스 만들기#

히스토리
  • 자동 종료 전 시간 GitLab 16.0에서 도입
  • 비공개 프로젝트 지원 GitLab 16.4에서 도입.
  • Git 참조Devfile 위치 GitLab 16.10에서 도입.
  • 자동 종료 전 시간 GitLab 16.10에서 워크스페이스 자동 종료 시간으로 이름 변경.
  • 변수 GitLab 17.1에서 도입.
  • 워크스페이스 자동 종료 시간 GitLab 17.6에서 제거.
  • 머지 리퀘스트 페이지에서 워크스페이스 만들기 GitLab 18.0에서 도입.
Warning

신뢰할 수 있는 프로젝트에서만 워크스페이스를 만드세요.

사전 요구 사항:

  1. 상단 표시줄에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 코드 > 새 워크스페이스를 선택합니다.
  3. 클러스터 에이전트 드롭다운 목록에서 프로젝트가 속한 그룹이 소유한 클러스터 에이전트를 선택합니다.
  4. Git 참조 드롭다운 목록에서 GitLab이 워크스페이스를 만드는 데 사용하는 브랜치, 태그 또는 커밋 해시를 선택합니다. 기본적으로 현재 보고 있는 브랜치입니다.
  5. Devfile 드롭다운 목록에서 다음 중 하나를 선택합니다:
  6. 변수에서 워크스페이스에 주입할 환경 변수의 키와 값을 입력합니다. 새 변수를 추가하려면 변수 추가를 선택합니다.
  7. 워크스페이스 만들기를 선택합니다.
  1. 상단 표시줄에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 코드 > 머지 리퀘스트를 선택합니다.
  3. 워크스페이스를 만들 머지 리퀘스트를 선택합니다.
  4. 코드 > 워크스페이스에서 열기를 선택합니다.
  5. 클러스터 에이전트 드롭다운 목록에서 프로젝트가 속한 그룹이 소유한 클러스터 에이전트를 선택합니다.
  6. Git 참조 드롭다운 목록에서 GitLab이 워크스페이스를 만드는 데 사용하는 브랜치, 태그 또는 커밋 해시를 선택합니다. 기본적으로 머지 리퀘스트의 소스 브랜치입니다.
  7. Devfile 드롭다운 목록에서 다음 중 하나를 선택합니다:
  8. 변수에서 워크스페이스에 주입할 환경 변수의 키와 값을 입력합니다. 새 변수를 추가하려면 변수 추가를 선택합니다.
  9. 워크스페이스 만들기를 선택합니다.

워크스페이스를 시작하는 데 몇 분이 걸릴 수 있습니다. 워크스페이스를 열려면 미리보기에서 워크스페이스를 선택합니다. 터미널에 접근하고 필요한 종속성을 설치할 수도 있습니다.

워크스페이스 시작 진행 상황 모니터링#

워크스페이스를 시작하면 워크스페이스 로그를 확인하여 초기화 작업 및 postStart 이벤트의 진행 상황을 모니터링할 수 있습니다. 자세한 내용은 워크스페이스 로그 디렉토리를 참조하세요.

플랫폼 호환성#

워크스페이스의 플랫폼 요구 사항은 개발 요구 사항에 따라 다릅니다.

기본 워크스페이스 기능의 경우, 워크스페이스는 기본 운영 체제와 관계없이 Kubernetes용 GitLab 에이전트를 지원하는 모든 linux/amd64 Kubernetes 클러스터에서 실행됩니다.

플랫폼 요구 사항에 맞는 방법을 선택하려면 워크스페이스에 대한 sudo 접근 구성을 참조하세요.

워크스페이스에서 컨테이너 빌드 및 실행#

히스토리

개발 환경은 런타임 중 종속성을 관리하고 사용하기 위해 컨테이너를 빌드하고 실행해야 하는 경우가 많습니다. 워크스페이스에서 컨테이너를 빌드하고 실행하려면 워크스페이스에 대한 sudo 접근 구성을 참조하세요.

프라이빗 컨테이너 레지스트리 지원 구성#

히스토리

프라이빗 컨테이너 레지스트리의 이미지를 사용하려면:

  1. Kubernetes에서 이미지 풀 시크릿을 만듭니다.
  2. 이 시크릿의 namenamespaceKubernetes용 GitLab 에이전트 구성에 추가합니다.

자세한 내용은 image_pull_secrets를 참조하세요.

워크스페이스에 대한 sudo 접근 구성#

히스토리

개발 환경은 런타임 중 종속성을 설치, 구성 및 사용하기 위해 sudo 권한이 필요한 경우가 많습니다. 플랫폼 요구 사항에 맞는 방법을 선택하세요:

방법 플랫폼 요구 사항 사용법
Sysbox 최신 정보는 Sysbox 배포 호환성 매트릭스를 참조하세요. 컨테이너 격리를 개선하고 컨테이너가 가상 머신과 동일한 워크로드를 실행할 수 있게 합니다.
Kata Containers 최신 정보는 Kata Containers 설치 가이드를 참조하세요. 경량 VM이 컨테이너처럼 작동하지만 향상된 워크로드 격리 및 보안을 제공합니다.
사용자 네임스페이스 Kubernetes 버전 1.33 이상에서는 기본적으로 활성화된 Kubernetes 기능 게이트 뒤에 사용자 네임스페이스가 있습니다. 최신 정보는 Kubernetes 기능 게이트를 참조하세요. 추가 런타임 설치가 필요하지 않습니다. 향상된 보안을 위해 컨테이너 사용자를 호스트 사용자로부터 격리합니다.

사전 요구 사항:

  • 컨테이너 이미지가 임의 사용자 ID를 지원해야 합니다. sudo 접근이 구성되어 있어도 devfile에 사용된 컨테이너 이미지는 사용자 ID 0으로 실행될 수 없습니다.

Sysbox 사용#

Sysbox는 컨테이너 격리를 개선하고 컨테이너가 가상 머신과 동일한 워크로드를 실행할 수 있게 하는 컨테이너 런타임입니다.

Sysbox로 sudo 접근을 구성하려면:

  1. Kubernetes 클러스터에서 Sysbox를 설치합니다.

  2. Kubernetes용 GitLab 에이전트를 구성합니다:

    • 기본 런타임 클래스를 설정합니다. default_runtime_class에서 Sysbox에 대한 런타임 클래스를 입력합니다. 예: sysbox-runc.
    • 권한 상승을 활성화합니다. allow_privilege_escalationtrue로 설정합니다.
    • Sysbox에서 요구하는 어노테이션을 구성합니다. annotations{"io.kubernetes.cri-o.userns-mode": "auto:size=65536"}으로 설정합니다.

Kata Containers 사용#

Kata Containers는 컨테이너처럼 동작하지만 가상 머신의 워크로드 격리 및 보안을 제공하는 경량 가상 머신의 표준 구현입니다.

Kata Containers로 sudo 접근을 구성하려면:

  1. Kubernetes 클러스터에서 Kata Containers를 설치합니다.

  2. Kubernetes용 GitLab 에이전트를 구성합니다:

    • 기본 런타임 클래스를 설정합니다. default_runtime_class에서 Kata Containers에 대한 런타임 클래스를 입력합니다. 예: kata-qemu.
    • 권한 상승을 활성화합니다. allow_privilege_escalationtrue로 설정합니다.

사용자 네임스페이스 사용#

사용자 네임스페이스는 컨테이너 사용자를 호스트 사용자로부터 격리합니다.

사용자 네임스페이스로 sudo 접근을 구성하려면:

  1. Kubernetes 클러스터에서 사용자 네임스페이스를 구성합니다.

  2. Kubernetes용 GitLab 에이전트를 구성합니다:

SSH로 워크스페이스에 연결#

히스토리

사전 요구 사항:

SSH 클라이언트로 워크스페이스에 연결하려면:

  1. gitlab-workspaces-proxy-ssh 서비스의 외부 IP 주소를 가져옵니다:

    kubectl -n gitlab-workspaces get service gitlab-workspaces-proxy-ssh
    
  2. 워크스페이스 이름을 가져옵니다:

    1. 상단 표시줄에서 검색 또는 이동을 선택합니다.
    2. 내 작업을 선택합니다.
    3. 워크스페이스를 선택합니다.
    4. 연결할 워크스페이스의 이름을 복사합니다.
  3. 다음 명령을 실행합니다:

    ssh <workspace_name>@<ssh_proxy_IP_address>
    
  4. 비밀번호의 경우 최소 read_api 범위의 개인 액세스 토큰을 입력합니다.

TCP 로드 밸런서를 통해 gitlab-workspaces-proxy에 연결하면 gitlab-workspaces-proxy가 사용자 이름 (워크스페이스 이름)을 검사하고 GitLab과 상호 작용하여 다음을 확인합니다:

  • 개인 액세스 토큰
  • 워크스페이스에 대한 사용자 접근 권한

워크스페이스 컨테이너 이미지 업데이트#

사용자 정의 워크스페이스 이미지를 두 가지 방법으로 업데이트할 수 있습니다.

워크스페이스 이미지가 워크스페이스 기본 이미지를 기반으로 하는 경우 SSH 지원이 이미 구성되어 있으므로 바로 사용할 수 있습니다. 이 방법은 이미지에 필요한 모든 워크스페이스 구성이 포함되어 있음을 보장합니다. 자세한 지침은 사용자 정의 워크스페이스 이미지 만들기를 참조하세요.

워크스페이스 기본 이미지를 사용하지 않으려면 자체 기본 이미지에서 빌드할 수 있습니다. 이 경우 런타임 이미지에서 SSH 지원을 수동으로 구성합니다:

  1. 런타임 이미지에 sshd를 설치합니다.
  2. 비밀번호 없이 컨테이너에 접근을 허용하는 gitlab-workspaces라는 사용자를 만듭니다.

다음은 SSH 구성 예시입니다:

FROM golang:1.20.5-bullseye

# `openssh-server` 및 기타 종속성 설치
RUN apt update \
    && apt upgrade -y \
    && apt install openssh-server sudo curl git wget software-properties-common apt-transport-https --yes \
    && rm -rf /var/lib/apt/lists/*

# 빈 비밀번호 허용
RUN sed -i 's/nullok_secure/nullok/' /etc/pam.d/common-auth
RUN echo "PermitEmptyPasswords yes" >> /etc/ssh/sshd_config

# 워크스페이스 호스트 키 생성
RUN ssh-keygen -A
RUN chmod 775 /etc/ssh/ssh_host_rsa_key && \
    chmod 775 /etc/ssh/ssh_host_ecdsa_key && \
    chmod 775 /etc/ssh/ssh_host_ed25519_key

# `gitlab-workspaces` 사용자 만들기
RUN useradd -l -u 5001 -G sudo -md /home/gitlab-workspaces -s /bin/bash gitlab-workspaces
RUN passwd -d gitlab-workspaces
ENV HOME=/home/gitlab-workspaces
WORKDIR $HOME
RUN mkdir -p /home/gitlab-workspaces && chgrp -R 0 /home && chmod -R g=u /etc/passwd /etc/group /home

# `/etc/shadow`에 대한 로그인 접근 허용
RUN chmod 775 /etc/shadow

USER gitlab-workspaces

관련 주제#