「Container-Optimized OS」から「Google Container Registry(GCR)」へコンテナイメージをpushする方法


「Container-Optimized OS」はGoogle謹製なので「gcloudコマンド」が標準装備されている!と誤解していたのはダディ伯爵だけでしょうか。
「Container-Optimized OS」では「gcloud コマンドライン ツール(Google Cloud SDK)」のインストールが出来ず「gcloudコマンド」が使えないため「gcloud dockerコマンド」ではpush出来ないのです。はい。
「Container-Optimized OS」から「Google Container Registry(GCR)」へコンテナイメージをアップロード(push)したいけれど「Container-Optimized OS」では「gcloud dockerコマンド」が使えない、どうしようぅ。という問題に遭遇し、無事に解決したので記録します。

1.「Cloud Shell」にて「gcloud auth print-access-token」コマンドを実行

「Cloud Shell」にて「gcloud auth print-access-token」コマンドを実行し「アクセストークンキー」を取得します。

  daddy_trevia ~ $ gcloud auth print-access-token
  ※アクセストークンキーが表示される※
  daddy_trevia ~ $

2.「docker login」コマンドで「Google Container Registry(GCR)」へログイン

「Container-Optimized OS」にて先ほど取得した「アクセストークンキー」を使ってログインします。
「Login Succeeded」となればログイン成功です。

  daddy_trevia@instance-1 ~ $ docker login -u oauth2accesstoken https://gcr.io
  Password: "アクセストークンキー" ★「Cloud Shell」からコピペ
  WARNING! Your password will be stored unencrypted in /home/daddy_trevia/.docker/config.json.
  Configure a credential helper to remove this warning. See
  https://docs.docker.com/engine/reference/commandline/login/#credentials-store

  Login Succeeded
  daddy_trevia@instance-1 ~ $

  daddy_trevia@instance-1 ~ $ cat /home/daddy_trevia/.docker/config.json
  {
          "auths": {
                  "gcr.io": {
                          "auth": "アクセストークンキー" ★平文で保存されてしまう
                  }
          },
          "HttpHeaders": {
                  "User-Agent": "Docker-Client/18.09.3 (linux)"
          }
  }
  daddy_trevia@instance-1 ~ $ 

3.「docker push」コマンドで「Google Container Registry(GCR)」へアップロード

いよいよ本題です。ログイン認証が通れば「docker push」コマンドでアップロード出来るのです。
以下の例では、「nginx2」という名前のカスタマイズしたコンテナーイメージを「daddytrevia」プロジェクトの「Google Container Registry(GCR)」へアップロードする手順になっています。
「gcr.io」は「Google Container Registry(GCR)」の米国リージョンのようです。以下のコマンド実行後にGoogle Cloud Storageのバケットが1個増え、詳細を確認すると米国リージョンでストレージクラス「マルチリージョン」となっていました。

(1)「Container-Optimized OS」にて「docker tag」コマンドでpushしたいイメージにタグを付けます。

  daddy_trevia@instance-1 ~ $ docker tag nginx2 gcr.io/daddytrevia/nginx2
  daddy_trevia@instance-1 ~ $ docker images
  REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
  nginx2                      latest              e3629e9c8b4e        7 days ago          109MB
  gcr.io/daddytrevia/nginx2   latest              e3629e9c8b4e        7 days ago          109MB
  daddy_trevia@instance-1 ~ $

(2)「Container-Optimized OS」にて「docker push」コマンドで「nginx2」を「Google Container Registry(GCR)」へアップロードします。

  daddy_trevia@instance-1 ~ $ docker push gcr.io/daddytrevia/nginx2
  The push refers to repository [gcr.io/daddytrevia/nginx2]
  050265de5038: Pushed 
  263fa2c9f9a1: Pushed 
  332fa54c5886: Layer already exists 
  6ba094226eea: Layer already exists 
  6270adb5794c: Layer already exists 
  latest: digest: sha256:36eda74c1b505eb4e94ac7a8c19a299e89cffbbfcf91f05ceeb782c8005bf8fc size: 1363
  daddy_trevia@instance-1 ~ $ 

「Pushed」となれば成功です。Google Cloud Platformコンソールにて「Container Registory」を開くとコンテナイメージがアップロードされていることが確認できます。

4.「docker logout」コマンドで「Google Container Registry(GCR)」からログアウト

「Container-Optimized OS」にてログアウトします。

  daddy_trevia@instance-1 ~ $ docker logout https://gcr.io
  Removing login credentials for gcr.io
  daddy_trevia@instance-1 ~ $ 

さきほどの「config.json」から「アクセストークンキー」が消えます。
以上で本題終了です。

GAE無料枠を利用して個人ブログを始める手順について、以下の参考記事にまとめていますので試してみたい方はご確認ください。


 Previous
クレカ不要でGCPを始めよう「Qwiklabs」が無料で使える♪ クレカ不要でGCPを始めよう「Qwiklabs」が無料で使える♪
一昔前から、クレジットカード登録さえすれば、1年間無料、1ヶ月無料といった無償サービスが主流でしたが、最近は、クレジットカード登録が不要で試せるようになっている無償サービスが出てきていますのでまとめてみました。 カテゴリ:GCP入門合わ
2019年06月24日
Next 
GCP認定資格「Associate Cloud Engineer」を受験するための勉強方法 GCP認定資格「Associate Cloud Engineer」を受験するための勉強方法
ダディ伯爵は、GCP勉強開始から3ヶ月でGCP認定アソシエイト資格「Associate Cloud Engineer」を取得しましたので記事を更新します。受験前、受験後のホットな情報を忘れないうちに記録していきます。 カテゴリ:GCP入門
2019年06月08日
  TOC