InfoGrab DocsInfoGrab Docs

Dependency Proxy

GitLab의 Dependency Proxy가 DockerHub 퍼블릭 레지스트리 이미지에 대한 풀-스루 캐시로 동작하는 구조와 인증, 캐싱, Workhorse 파일 처리, 정리 정책을 설명합니다.

Dependency Proxy는 DockerHub의 퍼블릭 레지스트리 이미지를 위한 풀-스루 캐시입니다. 이 문서는 GitLab에서 이 기능이 어떻게 구성되는지 설명합니다. 컨테이너 레지스트리 # 컨테이너 레지스트리용 Dependency Proxy는 원격 컨테이너 레지스트리의 대리자로 동작합니다. 여기서 원격 레지스트리는 퍼블릭 DockerHub 레지스트리입니다. flowchart TD id1([$ docker]) --> id2([GitLab Dependency Proxy]) id2 --> id3([DockerHub]) 사용자 관점에서, GitLab 인스턴스는 docker login gitlab.com 을 사용하여 이미지를 pull하기 위해 상호작용하는 단순한 컨테이너 레지스트리입니다. docker login gitlab.com 을 사용하면 Docker 클라이언트는 v2 API 를 사용하여 요청을 보냅니다. 인증을 지원하려면 다음 라우트를 반드시 포함해야 합니다: API Version Check docker pull 요청을 지원하려면 두 개의 추가 라우트를 포함해야 합니다: 이미지 매니페스트 pull 이미지 레이어(blob) pull 이 라우트들은 gitlab-org/gitlab/config/routes/group.rb 에 정의되어 있습니다. 가장 단순한 형태로, Dependency Proxy는 세 가지 요청을 처리합니다: 로그인 / JWT 반환 매니페스트 가져오기 blob 가져오기 다음은 Dependency Proxy의 일반적인 요청 시퀀스입니다: sequenceDiagram Client->>+GitLab: Login? / request token GitLab->>+Client: JWT Client->>+GitLab: request a manifest for an image GitLab->>+ExternalRegistry: request JWT ExternalRegistry->>+GitLab : JWT GitLab->>+ExternalRegistry : request manifest ExternalRegistry->>+GitLab : return manifest GitLab->>+GitLab : store manifest GitLab->>+Client : return manifest loop request image layers Client->>+GitLab: request a blob from the manifest GitLab->>+ExternalRegistry: request JWT ExternalRegistry->>+GitLab : JWT GitLab->>+ExternalRegistry : request blob ExternalRegistry->>+GitLab : return blob GitLab->>+GitLab : store blob GitLab->>+Client : return blob end 인증 및 인가 # Docker 클라이언트가 레지스트리에 인증할 때, 레지스트리는 클라이언트에게 JSON Web Token(JWT)을