IBM Cloud Kubernetes ServiceのContainer-Registoryからコンテナイメージを削除して整頓する方法

IBM Cloud Kubernetes Serviceには、Docker Private RegistoryであるContainer-Registoryというサービスがあります。
このサービスでは無料で512MBまで利用が可能なのですが、ビルドが重なっていくとすでに使用しなくなったタグのイメージが残って、上限に達してビルドできないときなどもあります。

この上限は無料での利用範囲を示しているだけで、
有料プランへアップグレードすることで容量に合わせた従量課金に切り替えることが可能となっています。

|プラン名|価格|
|:--|:--|
|Lite|512MBまでのコンテナイメージ保管<br>5GBまでのコンテナダウンロード|
|Standard|Lite(無料)プランの範囲+<br>超過した場合は|
||コンテナイメージ保管:<br>1GBあたりの従量課金$0.05/GB月|
||コンテナダウンロード:<br>1GBあたりの従量課金$0.08/GB|


# 基礎知識: Container-Registoryの使用状況とプランの確認
## Container Registoryの使用容量を確認する
英語環境(LANG=C)での実行イメージ

```
$ ibmcloud cr quota
Getting quotas and usage for the current month, for account 'Shoichiro Sakaigawa's Account'...
QUOTA          LIMIT       USED   
Pull traffic   Unlimited   0 B   
Storage        Unlimited   1.3 GB   

OK
```
日本語環境(LANG=ja_JP.UTF8)での実行イメージ

```
$ ibmcloud cr quota
アカウント「Shoichiro Sakaigawa's Account」の今月の割り当て量と使用量を取得しています...

割り当て量           制限     使用済み
プル・トラフィック   無制限   0 B
ストレージ           無制限   0 B

OK
```

## プランの確認
既に手元のアカウントがStandard版へアップグレード済みのため参考までですが、
無料版の場合は「Lite」と表示されます。

```
$ ibmcloud cr plan
アカウント「Shoichiro Sakaigawa's Account」の価格設定プランを取得しています...

「Standard」価格設定プランを使用しています。

OK
```

## プランのアップグレード
既に手元のアカウントがStandard版へアップグレード済みのため参考までですが、
無料版の場合は「Lite」と表示されます。

yを押すとアップグレードが可能となります。

```
$ ibmcloud cr plan-upgrade

アップグレードすると、お客様は「Standard」価格設定プランのご使用条件に同意したものとみなされます。https://www.ibm.com/software/sla/sladb.nsf/sla/bm-7670-03
この操作は元に戻せません。
価格設定プランのアップグレードを続行しますか? [y/N]>

```

# イメージの一覧確認と削除
## イメージ一覧の取得
DevOps ToolChainで白熱してビルドし続けるとあっという間にContainer-Registoryがいっぱいになります。
今回はこれらを削除して整理していきます。

```
$ ibmcloud cr images
REPOSITORY                                                                                 TAG   DIGEST         NAMESPACE         CREATED        SIZE     SECURITY STATUS   
registry.eu-gb.bluemix.net/gb_pumpkinheads/ch07-app-20180226145700117                      1     b7038a18e86d   gb_pumpkinheads   3 months ago   242 MB   29 Issues   
registry.eu-gb.bluemix.net/gb_pumpkinheads/ch07-app-20180226145700117                      2     b7038a18e86d   gb_pumpkinheads   3 months ago   242 MB   29 Issues   
registry.eu-gb.bluemix.net/gb_pumpkinheads/ch07-app-20180226145700117                      3     b7038a18e86d   gb_pumpkinheads   3 months ago   242 MB   29 Issues   
registry.eu-gb.bluemix.net/gb_pumpkinheads/ch07-app-20180226145700117                      4     3fe3c4a7cbfa   gb_pumpkinheads   3 months ago   242 MB   29 Issues   
registry.eu-gb.bluemix.net/gb_pumpkinheads/ch07-app-20180226145700117                      5     b7038a18e86d   gb_pumpkinheads   3 months ago   242 MB   29 Issues   
registry.eu-gb.bluemix.net/gb_pumpkinheads/ch07-app-20180312134038171                      1     3e755832745f   gb_pumpkinheads   2 months ago   246 MB   27 Issues   
registry.eu-gb.bluemix.net/gb_pumpkinheads/ch07-app-20180312134038171                      10    cc33d7d3b3ef   gb_pumpkinheads   2 months ago   246 MB   27 Issues   
registry.eu-gb.bluemix.net/gb_pumpkinheads/ch07-app-20180312134038171                      11    1db12d3a79a0   gb_pumpkinheads   2 months ago   246 MB   27 Issues   
registry.eu-gb.bluemix.net/gb_pumpkinheads/ch07-app-20180312134038171                      12    f42d44aed932   gb_pumpkinheads   2 months ago   246 MB   27 Issues   
registry.eu-gb.bluemix.net/gb_pumpkinheads/ch07-app-20180312134038171                      13    23619485e0eb   gb_pumpkinheads   2 months ago   246 MB   27 Issues   
registry.eu-gb.bluemix.net/gb_pumpkinheads/ch07-app-20180312134038171                      14    31c0c9fef831   gb_pumpkinheads   2 months ago   246 MB   27 Issues   
registry.eu-gb.bluemix.net/gb_pumpkinheads/ch07-app-20180312134038171                      15    fad89aa69b47   gb_pumpkinheads   2 months ago   246 MB   27 Issues   
registry.eu-gb.bluemix.net/gb_pumpkinheads/ch07-app-20180312134038171                      16    32b834da4ce0   gb_pumpkinheads   2 months ago   246 MB   27 Issues   
```

## 不要イメージの削除
不要イメージを個別に削除するには以下のコマンドで実施します。

```
$ ibmcloud cr image-rm {REPOSITORY}:{TAG}
```

## 番外編）空になるまですべて削除するワンライナー
すでに50個くらいのタグ付きビルドで溢れていたので一気に削除をする方法が無いか試してみました。

```
$ for str in `ibmcloud cr images | grep registry | awk '{print $1":"$2}'`; do ibmcloud cr image-rm $str; done
```

# まとめ
DevOps ToolChainでLiveコーディングしながらGitPushする度にビルドできるのは便利な反面、コンテナイメージが肥大化するとあっという間に消費してしまう。コンテナ自体の軽量化の見直しはもちろんのこと、Container-Registoryの定期的なメンテナンスは必要ですね。