Google Cloud Platform 内のコンテナイメージを高速ダウンロードする方法

Google Cloud Platform 内のコンテナイメージを高速ダウンロードする方法

はじめに

Google Cloud Platform 内にあるContainer Registryにある非公開のコンテナイメージをローカルパソコンに高速でダウンロードする方法をメモしておきます。

Google Cloud Shellにある「cloudshell download」でダウンロードする手順を試しましたが500MBで30分以上かかってイライラしたので、別の方法がないか模索している内に見つけた手順です。

コンテナイメージをネット上で公開せずに、別の開発者の方に渡す際に利用できる方法かと思います。
※ダウンロードしたファイルの整合性などは未確認ですので自己責任でお願いします。

GCPコンソールでpullコマンドをコピー

GCPコンソールで対象コンテナイメージの右端にある縦3点ドットのクリックするとサブメニューが開くので「pullコマンドを表示」をクリックし、pullコマンドをコピーしてくる。


docker pull gcr.io/project-name001/cont-img-manage-pilot:latest

Cloud Shellでpullコマンドを実行

GCPコンソール画面の右上にあるCloud ShellアイコンをクリックしCloud Shellを起動する。
先ほどコピーしたPullコマンドを実行。


docker pull gcr.io/project-name001/cont-img-manage-pilot:latest

取得したコンテナイメージを確認。


REPOSITORY                                        TAG       IMAGE ID       CREATED        SIZE
gcr.io/project-name001/cont-img-manage-pilot   latest    ee67c3b1f999   5 months ago   1.27GB

コンテナイメージの保存

取得したコンテナイメージは、Cloud Shell用の一時的な仮想VMのどこかに保存されているので、これをtar形式で保存?書き出し?を行う。
自分のルートディレクトリに保存、1.27GBもあるので数秒かかる。


MyAccountName@cloudshell:~$ docker save gcr.io/project-name001/cont-img-manage-pilot:latest -o cont-img-manage-pilot.tar

一時的なHTTPサーバーで公開してダウンロード

このファイルを一時的なHTTPサーバーで公開してダウンロードさせる。

公開ディレクトリに対象ファイルを移動させる


MyAccountName@cloudshell:/tmp/tmp.GPPKd6UX8R$ cp -Rp /home/MyAccountName/cont-img-manage-pilot.tar ./

一時的なHTTPサーバーを起動させる


MyAccountName@cloudshell:/tmp/tmp.GPPKd6UX8R$ python -m SimpleHTTPServer 8080

問題無く起動すると下記の様な表示がでてくる。


********************************************************************************
Python 2 is deprecated. Upgrade to Python 3 as soon as possible.
See https://cloud.google.com/python/docs/python2-sunset

To suppress this warning, create an empty ~/.cloudshell/no-python-warning file.
The command will automatically proceed in  seconds or on any key.
********************************************************************************
Serving HTTP on 0.0.0.0 port 8080 ...

Cloud Shellは現状のまま置いておいて、自分アイコンの左2個隣りの「ウェブプレビュー」アイコンからクリック
「ポート8080でプレビュー」をクリックするとウェブページが開く

この様な感じでダウンロードが可能になる。
ダウンロードが完了したらCloud Shellで「Ctrl + c」でHTTPサーバーを終了させる

1.27GBを約10分ほどでダウンロードできたので、そこそこ良い方法なのかもしれない。
※ダウンロードしたファイルの整合性などは未確認ですので自己責任でお願いします。

GCPからクラスタ強制削除のお知らせが来た

バージョン古いからクラスタごと強制削除するよと通告メールがきました。

Support for Docker as a container runtime on Kubernetes nodes will be removed from OSS Kubernetes and GKE starting with v1.24. Please migrate your GKE workloads to Containerd as soon as possible.

Hello DDDD,

We’re writing to let you know that OSS Kubernetes is moving on from Dockershim[1] and removing built-in support for the Docker container runtime (“Dockershim”) starting with v1.24. For this reason, GKE will not support GKE node images based on Dockershim starting with GKE v1.24.

Most user workloads do not have dependencies on the container runtime. If you use a node image based on Dockershim, please migrate your GKE workloads to a Containerd node image[2] as soon as possible.

For your reference, below are the GKE node images for the Containerd and Docker container runtimes, respectively:

Containerd container runtime (recommended): cos_containerd, ubuntu_containerd, windows_ltsc_containerd, windows_sac_containerd
Docker container runtime (unsupported starting with v1.24): cos, ubuntu, windows_ltsc, windows_sac

What do I need to know?

GKE will remove support for Dockershim starting with GKE v1.24[3]. To mitigate the impact of this change, we want to help you transition from Docker to Containerd node images: