Registry(GCR)に格納したプライベートDockerイメージをpullできるようにした方法のメモです。以下の4ステップで実現できました。pullしてイメージを取得するこの手順はGCRの公式ドキュメントのアクセス制御を参考に、プライベートなDockerイメージを参照できるようにした手順になります。以下の前提があります。SDKのコマンド(gcloud)がインストール済みGCP外のホストにDocker環境が構築済みコマンドやサービスの仕様は執筆時点のものです。検証に使用したソフトウェアのバージョンは以下のとおりです。Dockerイメージにアクセスするための専用のサービスアカウントを作成するサービスアカウントのページからサービスアカウントを作成します。この時点では権限は何も付与しなくて良いです。サービスアカウントのキーを作成してキーファイルを保存しておきます。このキーファイルをGCP外のホストに配布して認証に使用します。この後の設定で使用するのでサービスアカウントIDを控えておきます。サービスアカウントIDは以下のような形式です。Storage(GCS)のバケットに対してACLを設定するGCRそのものに権限設定はありません。GCRがDockerイメージの格納先として使用するGCSのバケットとそのオブジェクトに対して権限を設定します。GCRが使用するGCSのバケット名は以下の形式です。プロジェクトでGCRを有効化していると作られているはずです。GCSのページから確認して下さい。このバケットとバケット内のオブジェクトに対して、先ほど作成したサービスアカウントが、既存のDockerイメージと今後格納するDockerイメージの両方にアクセスできるよう、読み込み専用のACLを設定します。GCPコンソールからもできますがバケット内のオブジェクトに再帰的にACLを設定することができないようなので、CLIのgsutilを使用してACLを設定します。念の為:設定前のACLのダウンロード念の為、設定前のバケットのACLをダウンロードして、書き戻すことができるようにしておくこともできます。ACLのダウンロード以下のコマンドを実行するとACLの設定が記述されたテキストファイルがダウンロードできます。リダイレクトして保存しておきます。defacl.txtACLの書き戻しこのテキストファイルがあれば以下のようにしてACLを書き戻すことができます。gs://リージョン.artifacts.プロジェクトID.appspot.com読み込み権限の追加バケットとバケット内のオブジェクトに対してサービスアカウントの読み込み専用の権限を設定します。aclはGCSのACLを操作するコマンドです。アカウント:権限はユーザ単位の権限設定を行うオプションです。以下はバケットとバケット内のオブジェクトにサービスアカウントで読み込みの権限を追加するコマンドの例です。同様に今後バケット内に作成されるオブジェクトに対するデフォルトACLも設定します。defaclを使用し-rが無くなるだけです。詳細はgsutilの公式ドキュメントを参照して下さい。GCP外のホストにサービスアカウントの認証情報を設定するキーファイルをGCP外のホストに転送しておきます。activate-service-accountコマンドを使用して、認証情報を登録します。activate-service-accountの公式ドキュメントを参照して下さい。pullしてイメージを取得する以上の設定が終わるとGCRのDockerレジストリからpullができます。pullすると、狙い通りイメージがpullできるはずです。dockerの公式ドキュメントを参照して下さい。dockerを使用せずにdockerコマンドでGCRのレジストリにアクセスすることもできるようです。loginコマンドのリファレンスを参照して下さい。xmisaoプログラマ。Rubyでhttp_wire_traceオプションを使ってAPIとの通信内容を出力する2018-09-02ChromebookでLinuxを動かす。69でC101PAは完璧なLinuxノートになる。