GHCR同一 GitHub 権限境界で簡潔ですが越境 429に弱くなりがちです。私有 Registry近接・監査に強い一方、同期遅延と運用コストが乗ります。越境 docker pull の律速はレイヤ並列階層・トークン TTL/ローテーション・429/5xx 退避・ディスク水位に収束するため、一発参照の実行表CI プレースホルダで比較意思決定します。ホームブログ一覧Git/Docker プル加速

シナリオとリスク一覧

越境では429再試行連鎖が先に来やすいです。共有 runner ではレイヤバーストが重なり、トークンTTL不足で後半に再ログインが要ります。TLS インタセプトとレイヤ展開で水位も跳ねます。

意思決定の早引き同一組織・同一リージョン中心なら ghcr.io 直結+ジョブ内同時イメージを絞る監査ログ・固定出口 IP・VPC 近接が必須なら私有 Registry またはクラウド vendor Registryを主軸にし、GHCR はビルド成果物の公開配布面に限定するのが衝突が少ないです。

優先して潰すリスク(チェック順)
  • 429 連発:並列イメージ本数とレイヤ並列を先に下げる。
  • 認証切れdocker login をジョブ直前に寄せ、TTL とジョブ timeout を整合。
  • ディスク枯渇:警告閾値で prune/別ボリュームへ逃がす。

認証と最小権限

GHCRGITHUB_TOKEN または read 相当の PAT私有 Registryロボット+pull のみで監査 ID を残す。

レジストリ種別推奨シークレット最小スコープローテーション
GHCR(同一リポ CI)GITHUB_TOKENpackages:read 等ワークフロー権限ジョブ毎自動(TTLはホスト側セッションに依存)
GHCR(跨リポ/組織)PAT / GitHub Appパッケージ読取のみ30〜90 日+期限前ローテ
Harbor/GitLab Registry 等ロボットトークンpull のみ・プロジェクト限定7〜30 日、長いジョブは都度発行

越境ネットワークとミラー・エンドポイント照合表

三択は直結/ミラー/pull-through職場〜runnerの組合せで遅延が支配的になり得ます。

経路向き利点留意点向くシナリオ
ghcr.io 直結公式運用が単純、ロックイン低い429 に弱い/越境遅延小〜中規模・単一リージョン
クラウド vendor Registry(ECR/GCR/ACR 等)クラウド内VPC 近接でレイテンシ良好クロスクラウドで再度越境ビルドとイメージが同一クラウド
自前 Harbor/distribution社内/近傍リージョン帯域・認証を自前制御運用コスト・同期遅延監査・固定出口 IP が必須
pull-through キャッシュオリジン手前同一レイヤの再pull爆発を吸収無効化・TTL設計が要る多数 runner/モノレポ CI

早道:週次 429 なら並列+キャッシュ、遅延のみなら近接 Registry/レプリカを先に比較。

CI 連携ステップ(プレースホルダ付き)

表は初期値。P95 と 429/5xx で±1 段階。

実行パラメータ早見(コピー運用)

レバー主な設定キー推奨初期値判断メモ
同時レイヤ取得階層daemon.jsonmax-concurrent-downloads越境 2〜3/同一リージョン 4〜6429 やディスク await 悪化なら −1。ヒット率が高く平坦なら +1
ジョブ内同時イメージ本数ワークフロー内セマフォ/直列化1〜2IO 飽和・多段ビルドなら 1 に固定。
docker login トークン TTLPAT/ロボットの発行ポリシーGHCR PAT 30〜90 日、私有ロボット 7〜30 日(短め推奨)長尺 E2E は ジョブ分割pull 直前 login
HTTP 429/5xx 退避階段(秒)シェル sleep/オーケストレータ backoff4 → 12 → 30 → 90(上限 120 でクリップ)2 回目以降は並列を一段削るのがセット。
ディスク水位閾値監視メトリクス+キュー制御警告 78〜80%/新規大容量 pull キュー 85%/停止・清掃 90%(空き絶対値は 25→12→6 GB 段階)await >80ms が継続なら並列を半減

並列レイヤー取得(デーモン/ジョブ)

シナリオパラメータ推奨初期値上げる条件下げる条件
単一イメージ・越境daemon.jsonmax-concurrent-downloads2〜3レイテンシ低・429 なし429 またはディスク await 悪化
同一ジョブで複数 docker pullジョブ内直列化/セマフォ同時 1〜2 イメージキャッシュヒット率が高いレイヤ競合・IO 飽和
BuildKit ビルド中の取得BUILDKIT_MAX_PARALLELISM(ビルド並列)4〜6(8G 台)CPU 余力・ディスク快調プルとビルドが同一ディスクで競合

docker login とトークン TTL

トークン種別TTL 目安ログイン位置備考
GitHub Actions GITHUB_TOKENジョブと同一寿命ワークフロー内の pull 直前ホスト runner では別途 PAT が必要な場合あり
GHCR 用 PAT(人間/サービス)発行ポリシー 30〜90 日セッション開始時 1 回長い E2E はジョブ分割で timeout 内に収める
私有 Registry ロボット7〜30 日(短め推奨)各ジョブの最初の step期限 6h など短 TTL なら login を pull 直前に限定

HTTP 429/5xx 退避(ジョブオーケストレータ/シェル)

試行回数待機秒(目安)対象打ち切り後
1 回目失敗直後2〜5 s5xx/ネットワーク瞬断同一トークンで再試行可
2 回目8〜15 s429/502/503並列プルを 1 段階削る
3 回目20〜40 s429 継続キュー待ちまたは別ミラー経路
4 回目以降60〜120 s(上限クリップ)依然 429アラート+手動で帯域/認証を点検

ディスク水位(Docker レイヤ)

指標警告スロットル停止・清掃
データボリューム使用率≥ 78〜80%≥ 85% で新規大容量 pull キュー≥ 90%:ジョブ延期+docker system prune 方針実行
空き容量(絶対)< 25 GB< 12 GB< 6 GB:イメージ LRU 削除
ディスク await> 15 ms が 5 分継続> 40 ms> 80 ms:並列取得を半減

コマンドはプレースホルダのまま Runbook 化し、実値はシークレット注入。

# 1) 認証(GHCR 例)
printf '%s' "${GITHUB_TOKEN_PLACEHOLDER}" | docker login ghcr.io -u "${GITHUB_ACTOR_PLACEHOLDER}" --password-stdin

# 2) 私有 Registry 例
printf '%s' "${REGISTRY_TOKEN_PLACEHOLDER}" | docker login "${REGISTRY_HOST_PLACEHOLDER}" -u "${REGISTRY_USER_PLACEHOLDER}" --password-stdin

# 3) 取得(ダイジェスト固定推奨)
docker pull "ghcr.io/${ORG_PLACEHOLDER}/${IMAGE_PLACEHOLDER}@${DIGEST_PLACEHOLDER}"

# 4) 失敗時の擬似リトライ(シェル/CI step 用プレースホルダ)
for i in 1 2 3 4; do
  docker pull "${IMAGE_REF_PLACEHOLDER}" && break
  case "$i" in 1) sleep "${BACKOFF_SEC_1_PLACEHOLDER:-4}";; 2) sleep "${BACKOFF_SEC_2_PLACEHOLDER:-12}";; 3) sleep "${BACKOFF_SEC_3_PLACEHOLDER:-30}";; *) sleep "${BACKOFF_SEC_4_PLACEHOLDER:-90}";; esac
done

FAQ(プル停滞・証明書・プロキシ)

Q. レイヤ停滞/認証切れ
A. 並列取得を下げ、docker login を pull 直前へ。プロキシ idle timeout も確認。

Q. 証明書とプロキシ
A. x509 は社内 TLS 検査が多い→ルート CA 配布。プロキシのみ失敗は HTTP(S)_PROXYNO_PROXY と daemon/CI の二重指定を点検。

Q. 401 と digest 不一致
A. 401 はスコープ不足期限切れread:packages 相当とローテ時刻を再確認。digest 不一致はタグ側の更新に追随し、再現性が要るなら解決済み digest 固定を CI に記録。

まとめと次の一手(購入・資料)

安定は並列・TTL・退避・ディスクの同時設計。主軸は認証境界429 頻度で表に寄せるのが実務的です。

越境 CI は専用リモート Macで検証。料金購入ヘルプ(ログイン不要)。ブログ一覧プル加速

越境コンテナ CI

GHCR/私有 Registry の再現環境をリモート Mac で

料金・購入・ヘルプはログイン不要。ブログ記事のみで方針が固まらない場合は、まずプラン比較からどうぞ。