ジョブの実行を高速化する
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
イメージと依存関係をキャッシュすることで、ジョブのパフォーマンスを向上させることができます。
コンテナのプロキシの使用
以下を使用すると、Dockerイメージをダウンロードする時間を短縮できます:
- GitLab依存プロキシ、または
- DockerHubレジストリのミラー
- その他のオープンソースソリューション
GitLab Dependency Proxy
コンテナイメージへのアクセスをより迅速に行うために、依存プロキシを使用して、コンテナイメージをプロキシできます。
Docker Hubレジストリミラー
Docker Hubをミラーリングすることで、ジョブがコンテナイメージにアクセスする時間を短縮することもできます。これにより、Registry as a pull through cacheになります。ジョブの実行速度が向上するだけでなく、ミラーを使用すると、Docker Hub停止やDocker Hubレート制限に対するインフラストラクチャの耐性を高めることができます。
Dockerデーモンがmirrorを使用するように設定されている場合、ミラーの実行中のインスタンスでイメージが自動的に確認されます。利用できない場合、パブリックDockerレジストリからイメージをプルし、ローカルに保存してから、ユーザーに返します。
同じイメージに対する次のリクエストは、ローカルレジストリからプルされます。
その仕組みの詳細については、Dockerデーモンの設定ドキュメントを参照してください。
Docker Hubレジストリミラーを使用
Docker Hubレジストリミラーを作成するには、次の手順に従います:
プロキシコンテナレジストリが実行される専用マシンにログインします。
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アドレスを選択する必要があります。通常、プライベートネットワークは、DigitalOcean、AWS、またはAzureのような単一プロバイダーのマシン間の内部通信に最適なソリューションです。通常、プライベートネットワークで転送されるデータは、月間帯域幅の制限には適用されません。
Docker Hubレジストリは、MY_REGISTRY_IP:6000でアクセスできます。
新しいレジストリサーバーを使用するようにconfig.toml設定できるようになりました。
その他のオープンソースソリューション
rpardini/docker-registry-proxyは、GitLabコンテナレジストリを含む、ほとんどのコンテナレジストリをローカルでプロキシできます。
分散キャッシュを使用する
分散キャッシュを使用すると、言語の依存関係をダウンロードする時間を短縮できます。
分散キャッシュを指定するには、キャッシュサーバーをセットアップしてから、Runnerがそのキャッシュサーバーを使用するように設定します。
オートスケールを使用している場合は、分散Runnerのキャッシュ機能の詳細をご覧ください。
以下のキャッシュサーバーがサポートされています:
- AWS S3
- MinIOまたはその他のS3互換キャッシュサーバー
- Google Cloud Storage
- Azure Blob Storage
GitLab CI/CDのキャッシュの依存関係とベストプラクティスをご覧ください。
AWS S3を使用
分散キャッシュとしてAWS S3を使用するには、Runnerのconfig.toml設定ファイルを編集してS3の場所を指定し、接続用の認証情報を提供します。RunnerにS3エンドポイントへのネットワークパスがあることを確認してください。
S3 VPCエンドポイントを有効にすると、NATゲートウェイを備えたプライベートサブネットを使用している場合、データ転送のコストを節約できます。
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で利用可能になります。Runnerで使用されるバケットを作成します:
sudo mkdir /export/runnerrunnerはその場合のバケットの名前です。別のバケットを選択した場合、それは異なります。すべてのキャッシュは/exportディレクトリに保存されます。Runnerを設定するときに、(上記から)
MINIO_ROOT_USER値とMINIO_ROOT_PASSWORD値をアクセスキーとシークレットキーとして使用します。
新しいキャッシュサーバーを使用するようにconfig.toml設定できるようになりました。
Google Cloud Storage
分散キャッシュとしてGoogle Cloud Platformを使用するには、Runnerのconfig.toml設定ファイルを編集してGCPの場所を指定し、接続用の認証情報を提供します。RunnerにGCSエンドポイントへのネットワークパスがあることを確認してください。
Azure Blob Storageを使用する
分散キャッシュとしてAzure Blobストレージを使用するには、Runnerのconfig.toml設定ファイルを編集してAzureの場所を指定し、接続用の認証情報を提供します。RunnerにAzureエンドポイントへのネットワークパスがあることを確認してください。