작업 실행 속도 향상
이미지와 종속성을 캐싱하여 작업 성능을 향상시킬 수 있습니다.
컨테이너에 대한 프록시 사용
다음과 같은 방법으로 Docker 이미지를 다운로드하는 시간을 단축할 수 있습니다:
- GitLab Dependency Proxy 또는
- DockerHub 레지스트리의 미러
- 기타 오픈 소스 솔루션
GitLab Dependency Proxy
컨테이너 이미지에 더 빠르게 접근하기 위해
Dependency Proxy를 사용하세요
컨테이너 이미지를 프로시합니다.
Docker Hub Registry 미러
Docker Hub를 미러링하여 작업이 컨테이너 이미지를 접근하는 시간을 줄일 수 있습니다.
이로 인해 Registry가 풀 스루 캐시로 작동합니다.
작업 실행 속도를 높이는 것 외에도, 미러는 인프라를
Docker Hub 중단 및 Docker Hub 비율 제한에 대해 더 견고하게 만들 수 있습니다.
Docker 데몬이 미러 사용을 위해 구성되면
자동으로 실행 중인 미러 인스턴스에서 이미지를 확인합니다.
사용 불가능할 경우, 공용 Docker 레지스트리에서 이미지를 풀러와
로컬에 저장한 후 여러분에게 반환합니다.
다음 요청은 로컬 레지스트리에서 동일한 이미지를 풀러옵니다.
작동 방식에 대한 보다 자세한 내용은 여기에서 확인할 수 있습니다.
Docker Hub Registry 미러 사용
Docker Hub Registry 미러를 만들려면:
- 프록시 컨테이너 레지스트리가 실행될 전용 머신에 로그인합니다.
- 해당 머신에 Docker Engine이 설치되어 있는지 확인합니다.
-
새로운 컨테이너 레지스트리를 생성합니다:
docker run -d -p 6000:5000 \ -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \ --restart always \ --name registry registry:2
레지스트리를 다른 포트에서 노출하려면 포트 번호(
6000
)를 수정할 수 있습니다.
이 서버는http
로 시작합니다. TLS(https
)를 켜고 싶으면
공식 문서를 따릅니다. -
서버의 IP 주소를 확인합니다:
hostname --ip-address
사설 네트워크 IP 주소를 선택해야 합니다. 사설
네트워크는 일반적으로 동일한 공급자의 머신 간의 내부 통신에 가장 빠른 솔루션입니다.
일반적으로 사설 네트워크에서 전송된 데이터는
월별 대역폭 한도에 적용되지 않습니다.
Docker Hub 레지스트리는 MY_REGISTRY_IP:6000
에서 접근할 수 있습니다.
이제 새로운 레지스트리 서버를 사용하도록
config.toml
을
구성할 수 있습니다.
기타 오픈 소스 솔루션
-
rpardini/docker-registry-proxy
는
GitLab Container Registry를 포함하여 대부분의 컨테이너 레지스트리를 로컬로 프록시할 수 있습니다.
분산 캐시 사용
분산 캐시를 사용하여 언어 종속성을 다운로드하는 시간을
단축할 수 있습니다.
분산 캐시를 지정하려면 캐시 서버를 구축한 다음
러너가 해당 캐시 서버를 사용하도록 구성합니다.
자동 확장을 사용하는 경우, 분산 러너의
캐시 기능에 대해 자세히 알아보세요.
다음 캐시 서버가 지원됩니다:
- AWS S3
- MinIO 또는 기타 S3 호환 캐시 서버
- Google Cloud Storage
- Azure Blob storage
GitLab CI/CD 캐시 종속성 및 모범 사례에 대해 자세히 알아보세요.
AWS S3 사용하기
AWS S3를 분산 캐시로 사용하려면,
러너의 config.toml
파일을 편집하여
S3 위치를 가리키고 연결을 위한 자격 증명을 제공하십시오.
러너가 S3 엔드포인트에 대한 네트워크 경로를 가지고 있는지 확인하십시오.
개인 서브넷과 NAT 게이트웨이를 사용하는 경우,
데이터 전송 비용을 절감하기 위해 S3 VPC 엔드포인트를 활성화할 수 있습니다.
MinIO 사용하기
AWS S3 대신, 자체 캐시 저장소를 생성할 수 있습니다.
- 캐시 서버가 실행될 전용 머신에 로그인합니다.
- 해당 머신에 Docker Engine이 설치되어 있는지 확인하십시오.
-
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
를 수정할 수 있습니다. -
서버의 IP 주소를 확인하십시오:
hostname --ip-address
- 귀하의 캐시 서버는
MY_CACHE_IP:9005
에서 사용할 수 있습니다. -
러너에서 사용할 버킷을 생성하십시오:
sudo mkdir /export/runner
이 경우
runner
는 버킷의 이름입니다. 다른 버킷을 선택하면 다르게 됩니다. 모든 캐시는/export
디렉토리에 저장됩니다. - 러너를 구성할 때 위에서 언급한
MINIO_ROOT_USER
와MINIO_ROOT_PASSWORD
값을
Access와 Secret Keys로 사용하십시오.
이제
새 캐시 서버를 사용하도록 config.toml
을 구성할 수 있습니다.
Google Cloud Storage 사용하기
Google Cloud Platform을 분산 캐시로 사용하려면,
러너의 config.toml
파일을 편집하여
GCP 위치를 가리키고 연결을 위한 자격 증명을 제공하십시오.
러너가 GCS 엔드포인트에 대한 네트워크 경로를 가지고 있는지 확인하십시오.
Azure Blob storage 사용하기
Azure Blob storage를 분산 캐시로 사용하려면,
러너의 config.toml
파일을 편집하여
Azure 위치를 가리키고 연결을 위한 자격 증명을 제공하십시오.
러너가 Azure 엔드포인트에 대한 네트워크 경로를 가지고 있는지 확인하십시오.