「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コマンド」が使えない、どうしようぅ。という問題に遭遇し、無事に解決したので記録します。
- GCPのAlways FreeのGAE無料枠を使ってみた
- GAEの「無料ドメイン」と「無料SSL証明書」がとても便利♪
- 社内PCからRDP接続するために中継サーバ(Guacamole)をdockerコンテナで立ててみた
- 社内PCからGCPのdockerコンテナ環境へSSH接続する
- 「Container-Optimized OS」から「Google Container Registry(GCR)」へコンテナイメージをpushする方法
- Google Cloud Platform(GCP)認定資格の勉強方法
- GCP認定資格「Associate Cloud Engineer」を受験するための勉強方法
- GCP認定資格「Professional Cloud Architect」を受験するための勉強方法
- Google Cloud Platform(GCP)イベント「Cloud OnBoard」に参加してみた
- クレカ不要でGCPを始めよう「Qwiklabs」が無料で使える♪
- クラウド移行ツール「CloudEndure(クラウドエンデュア)」が無料で使える
- ロードバランサー比較(AWS、Azure、GCP)
- SD-WANをOSSで実現できるのか?
- マルチクラウドにおけるVPNネットワーク相互接続について
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無料枠を利用して個人ブログを始める手順について、以下の参考記事にまとめていますので試してみたい方はご確認ください。
- GCPのAlways FreeのGAE無料枠を使ってみた
- GAEの「無料ドメイン」と「無料SSL証明書」がとても便利♪
- 社内PCからRDP接続するために中継サーバ(Guacamole)をdockerコンテナで立ててみた
- 社内PCからGCPのdockerコンテナ環境へSSH接続する
- 「Container-Optimized OS」から「Google Container Registry(GCR)」へコンテナイメージをpushする方法
- Google Cloud Platform(GCP)認定資格の勉強方法
- GCP認定資格「Associate Cloud Engineer」を受験するための勉強方法
- GCP認定資格「Professional Cloud Architect」を受験するための勉強方法
- Google Cloud Platform(GCP)イベント「Cloud OnBoard」に参加してみた
- クレカ不要でGCPを始めよう「Qwiklabs」が無料で使える♪
- クラウド移行ツール「CloudEndure(クラウドエンデュア)」が無料で使える
- ロードバランサー比較(AWS、Azure、GCP)
- SD-WANをOSSで実現できるのか?
- マルチクラウドにおけるVPNネットワーク相互接続について