正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

ジョブの実行を高速化する

  • プラン: 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レジストリミラーを作成するには、次の手順に従います:

  1. プロキシコンテナレジストリが実行される専用マシンにログインします。

  2. Docker Engineがそのマシンにインストールされていることを確認してください。

  3. 新しいコンテナレジストリを作成します:

    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)を有効にする場合は、公式ドキュメントに従ってください。

  4. サーバーのIPアドレスを確認します:

    hostname --ip-address

    プライベートネットワークのIPアドレスを選択する必要があります。通常、プライベートネットワークは、DigitalOcean、AWS、またはAzureのような単一プロバイダーのマシン間の内部通信に最適なソリューションです。通常、プライベートネットワークで転送されるデータは、月間帯域幅の制限には適用されません。

Docker Hubレジストリは、MY_REGISTRY_IP:6000でアクセスできます。

新しいレジストリサーバーを使用するようにconfig.toml設定できるようになりました。

その他のオープンソースソリューション

  • rpardini/docker-registry-proxyは、GitLabコンテナレジストリを含む、ほとんどのコンテナレジストリをローカルでプロキシできます。

分散キャッシュを使用する

分散キャッシュを使用すると、言語の依存関係をダウンロードする時間を短縮できます。

分散キャッシュを指定するには、キャッシュサーバーをセットアップしてから、Runnerがそのキャッシュサーバーを使用するように設定します

オートスケールを使用している場合は、分散Runnerのキャッシュ機能の詳細をご覧ください。

以下のキャッシュサーバーがサポートされています:

GitLab CI/CDのキャッシュの依存関係とベストプラクティスをご覧ください。

AWS S3を使用

分散キャッシュとしてAWS S3を使用するには、Runnerのconfig.toml設定ファイルを編集してS3の場所を指定し、接続用の認証情報を提供します。RunnerにS3エンドポイントへのネットワークパスがあることを確認してください。

S3 VPCエンドポイントを有効にすると、NATゲートウェイを備えたプライベートサブネットを使用している場合、データ転送のコストを節約できます。

MinIOを使用

AWS S3を使用する代わりに、独自のキャッシュストレージを作成できます。

  1. キャッシュサーバーが実行される専用マシンにログインします。

  2. Docker Engineがそのマシンにインストールされていることを確認してください。

  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. Runnerで使用されるバケットを作成します:

    sudo mkdir /export/runner

    runnerはその場合のバケットの名前です。別のバケットを選択した場合、それは異なります。すべてのキャッシュは/exportディレクトリに保存されます。

  7. 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エンドポイントへのネットワークパスがあることを確認してください。