작업 실행 속도 향상

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed

작업의 성능을 향상시키려면 이미지와 종속성을 캐싱하는 방법을 사용할 수 있습니다.

컨테이너용 프록시 사용

도커 이미지를 다운로드하는 데 걸리는 시간을 단축하는 방법은 다음과 같습니다:

  • GitLab 종속성 프록시 또는
  • DockerHub 레지스트리의 미러
  • 기타 오픈 소스 솔루션

GitLab 종속성 프록시

컨테이너 이미지에 더 빨리 액세스하려면 종속성 프록시를 사용하여 컨테이너 이미지를 프록시할 수 있습니다.

Docker Hub 레지스트리 미러

Docker Hub의 이미지에 작업을 액세스하는 데 걸리는 시간을 단축할 수도 있습니다. 이를 통해 레지스트리를 풀 스루 캐시로 사용할 수 있습니다. 작업 실행 속도를 높이는 데 추가로 도움이 되며, 미러를 사용하면 Docker Hub의 장애와 Docker Hub의 속도 제한에 대해 인프라가 더 견고해집니다.

도커 데몬이 미러를 사용하도록 구성되어 있으면 컨테이너를 실행 중인 미러의 인스턴스에서 이미지를 자동으로 확인합니다. 사용할 수 없는 경우, 해당 이미지를 공개 Docker 레지스트리에서 가져와 로컬에 저장한 다음 그것을 반환합니다.

동일한 이미지에 대한 다음 요청은 로컬 레지스트리에서 가져옵니다.

작동 방식에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

Docker Hub 레지스트리 미러 사용

Docker Hub 레지스트리 미러를 생성하려면 다음을 수행하세요:

  1. 프록시 컨테이너 레지스트리가 실행될 전용 머신에 로그인합니다.
  2. 해당 머신에 도커 엔진이 설치되어 있는지 확인합니다.
  3. 새 컨테이너 레지스트리를 생성합니다:

    docker run -d -p 6000:5000 \
        -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
        --restart always \
        --name registry registry:2
    

    포트 번호(6000)를 수정하여 레지스트리를 다른 포트에서 노출할 수 있습니다. 이렇게 하면 http로 서버가 시작됩니다. https로 전환하려면 공식 문서를 참조하세요(https://distribution.github.io/distribution/about/configuration/#tls).

  4. 서버의 IP 주소를 확인합니다:

    hostname --ip-address
    

    사설 네트워크 IP 주소를 선택해야 합니다. 사설 네트워크는 DigitalOcean, AWS 또는 Azure와 같은 단일 제공 업체의 기계 간 내부 통신에 대한 일반적인 솔루션입니다. 보통 사설 네트워크에서 전송되는 데이터는 월간 대역폭 한도에 적용되지 않습니다.

Docker Hub 레지스트리는 MY_REGISTRY_IP:6000에서 액세스할 수 있습니다.

이제 새 레지스트리 서버를 사용하도록 config.toml을 구성할 수 있습니다.

기타 오픈 소스 솔루션

  • rpardini/docker-registry-proxy는 GitLab 컨테이너 레지스트리를 포함하여 대부분의 컨테이너 레지스트리를 로컬로 프록시할 수 있습니다.

분산 캐시 사용

언어 종속성을 다운로드하는 데 걸리는 시간을 줄일 수 있도록 분산 캐시를 사용할 수 있습니다.

분산 캐시를 지정하려면 캐시 서버를 설정한 다음 런너가 해당 캐시 서버를 사용하도록 구성합니다.

오토스케일링을 사용하는 경우, 분산 러너 캐싱에 대해 자세히 알아보세요.

다음의 캐시 서버가 지원됩니다:

GitLab CI/CD 캐시 의존성 및 모범 사례에 대해 자세히 알아보세요.

AWS S3 사용

AWS S3를 분산 캐시로 사용하려면 런너의 config.toml 파일을 편집하여 S3 위치를 가리키고 연결에 필요한 자격 증명을 제공하세요. 러너가 S3 엔드포인트로의 네트워크 경로를 가져야 합니다.

NAT 게이트웨이가 있는 개인 서브넷을 사용하는 경우 데이터 전송 비용을 절약하기 위해 S3 VPC 엔드포인트를 활성화할 수 있습니다.

MinIO 사용

AWS S3 대신에 자체 캐시 스토리지를 만들 수도 있습니다.

  1. 캐시 서버가 실행될 전용 머신에 로그인합니다.
  2. 해당 머신에 도커 엔진이 설치되어 있는지 확인합니다.
  3. Go로 작성된 간단한 S3 호환 서버인 MinIO를 시작합니다:

    docker run -d --restart always -p 9005:9000 \
            -v /.minio:/root/.minio -v /export:/export \
            -e "MINIO_ROOT_USER=<minio_root_username>" \
            -e "MINIO_ROOT_PASSWORD=<minio_root_password>" \
            --name minio \
            minio/minio:latest server /export
    

    포트 번호 9005를 수정하여 캐시 서버를 다른 포트에서 노출할 수 있습니다.

  4. 서버의 IP 주소를 확인합니다:

    hostname --ip-address
    
  5. 캐시 서버는 MY_CACHE_IP:9005에서 이용할 수 있습니다.
  6. 러너에서 사용할 버킷을 생성합니다:

    sudo mkdir /export/runner
    

    이 경우 runner은 버킷의 이름입니다. 다른 버킷을 선택하면 다르게 됩니다. 모든 캐시는 /export 디렉터리에 저장됩니다.

  7. 러너를 구성할 때 MINIO_ROOT_USERMINIO_ROOT_PASSWORD 값을 사용자의 액세스 및 비밀 키로 사용하세요.

이제 새 캐시 서버를 사용하도록 config.toml을 구성할 수 있습니다.

Google Cloud Storage 사용

Google Cloud Platform을 분산 캐시로 사용하려면, 런너의 config.toml 파일을 편집하여 GCP 위치를 가리키고 연결에 필요한 자격 증명을 제공하세요. 런너가 GCS 엔드포인트에 연결할 수 있는 네트워크 경로가 있는지 확인하세요.

Azure Blob Storage 사용

Azure Blob Storage를 분산 캐시로 사용하려면, 런너의 config.toml 파일을 편집하여 Azure 위치를 가리키고 연결에 필요한 자격 증명을 제공하세요. 런너가 Azure 엔드포인트에 연결할 수 있는 네트워크 경로가 있는지 확인하세요.