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