😊

CloudRunでDockerHubのPrivateなDockerイメージをPullする方法

2023/12/25に公開

Dockerのプライベートリポジトリを作りたいとなった場合に、GCPのArtifact Registryはコンテナサイズが大きいと、転送やディスク容量が原因で費用がかさむ傾向にあります。一方で、DockerHubの有料プランは、Privateリポジトリ無制限の月額プランであるため、私はDockerHubの有料プランに加入して、プライベートリポジトリを使っています。

CloudRunを用いて、DockerHubのPrivateリポジトリにアクセスする方法が、
正しくChatGPTに教えてもらえなかったため、久しぶりにGoogleで色々と調べていました。

CloudRunでPrivateイメージを利用する方法

結果的には、下記の2つの記事を参考にPrivateリポジトリからPullできるCloudRunを作成できました。

ざっくり説明すると、DockerHubのイメージを一旦Artifact Registryにダウンロードして、Artifact Registry経由でCloudRunにダウンロードするという形になります。
Artifact RegistryのリージョンをCloudRunのリージョンと同じリージョンにした場合、docker pullの料金がかからないため、キャッシュの削除頻度をうまく設定すれば、そこそこ費用を抑えられるのではないかと思います。ただ、費用見積もりは自己責任で。

上記記事に関して、少し注意点ですが、docker pullする際のイメージ名は次のようになると記載されていますが、
DOCKER_HUB_IMAGE_NAMEは、プライベートリポジトリの場合、<USER_NAME>/<REPOSITORY_NAME>となるため、そこだけ注意してください。

git pull <REGION_NAME>-docker.pkg.dev/<PROJECT_ID>/<REPOSITORY_NAME>/<DOCKER_HUB_IMAGE_NAME>(:<TAG>)

ChatGPTの間違い情報に対する対策

今回は、GPT4を使っていたが、
久しぶりのハルシネーションだったことと、
間違った部分の判定が難しかったこともあり、
油断して、少し時間を無駄にしてしまいました。

今回、ChatGPTが出したPrivateリポジトリの設定方法には2つがありました。

  1. DOCKER_CONFIG環境変数にdockerのconfigファイルのパスを設定して、そのConfig内の認証情報を利用する方法
  2. DOCKERHUB_USERNAMEとDOCKERHUB_TOKEN環境変数にユーザ名とアクセストークンを指定する方法です。

1は全く検索にヒットしなかったため、
ハルシネーションは簡単にわかったのですが、
2に関しては、その環境変数を使った設定ファイルっぽいのが出てきたため、
なにかそういう方法があるのではないかと何度か試行錯誤してしまいました。
ただ、その後よくよく調べると、docker loginを使わずに、docker pull時に認証する方法は見当たらず、CloudRunでdocker loginする仕組みがなさそうなことを考えると、他の方法を検討する必要がありそうでした。そこで、Googleで色々と調べたところ、Artifact Registryを経由して、Dockerhubのプライベートリポジトリにアクセスする方法が見つかりました。

このDockerhubのPrivateリポジトリへのアクセス方法は、2023年4月以降に提供されたっぽく、GPT4の学習データには入ってなさそうでした。まぁ、考えればありそうなのですが、GPT4でも、こういう学習データにまったくない情報があっても、それっぽい情報を生成してしまうのですね。GPT3.5ではハルシネーションはよくありましたが、GPT4で見かけたのは久しぶりで、ハマってしまいました...

まとめ

ここからの学びは一つで、GPT4になってきて、ハルシネーションの見分けをつけるのが難しくなってきたため、試行が大変な情報や、試してみてうまくいかなかった情報は、更に色々と試行錯誤する前に、一度立ち止まる必要があるなと感じました。具体的には、裏付けとなる情報を少し探したり、もともとの学習データになっているはずの情報をGoogle検索で覗いてみたりとか、工夫して見る必要があると感じました。

Discussion