IKS + Db2 on IBM Cloud で DBアクセスアプリを動かしてみた（4.Container Registry の準備）

#はじめに

「[IKS + Db2 on IBM Cloud で DBアクセスアプリを動かしてみた](https://qiita.com/shimauma_Zzzzz/items/9a513abdf02d11fff55b)」の　第4回です。
ここでは、 IBM Cloud Container Registry のセットアップについて記載します。
図の赤枠の部分です。

![24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/1e6958a2-cfa3-017a-16ea-0f947f00bd9b.png)

実施内容は以下の通りです。

- Container Registry の作成
- Container Registry の操作
- コンテナイメージの登録・削除
- その他の操作・確認


#Container Registry の作成

IBM Cloud で各種サービスを作成するときは、
まず、「[IBM Cloud Login 画面](https://cloud.ibm.com/login)」からログインしてください。

ダッシュボードが表示されます。

![25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/ae29f834-261b-f8ac-09e7-6c7d9ce2c8aa.png)


上部の 「カタログ」または、右上の 「リソースの作成」　を押します。
カタログが表示されます。
表示されたカタログの検索画面で 「Registry」と入力して検索してください。

![26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/c41bf3b1-fb3b-58a6-2b5b-94983791347c.png)


表示された「Container Registry」を選択します。
作成画面が表示されますが、プランを選ぶところはないようで、そのまま「作成」を押します。

![27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/6157cb0d-2c12-13f0-9702-876ee123f1ea.png)

作成ボタンを押すと、すぐに下図の画面に遷移します。

![28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/52bc1bc8-0273-251d-1857-e10c41d694ce.png)


#Container Registry の操作

先程表示されたレジストリーの画面の「クイックスタート」タブに沿って
コマンドを入力していきます。
他のタブを見ると GUI でできそうですが、実際にはコマンドを発行するようにガイドされるだけのようです。
難しくもないですのでコマンドでやりましょう。

##Container Registry Plugin のインストール

Container Registry Plugin　のインストールコマンド記載されていますが、
[第2回](https://qiita.com/shimauma_Zzzzz/items/99d71965dad142f93e5b) で CLI を準備していれば
プラグインはインストールされているはずです。
下記の例では、　N でインストールをスキップしています。

```console:Container_Registry_Pluginインストール
# ibmcloud plugin install container-registry -r 'IBM Cloud'
リポジトリー 'IBM Cloud' から 'container-registry' を検索しています...
プラグイン 'container-registry 0.1.485' がリポジトリー 'IBM Cloud' 内で見つかりました
プラグイン 'container-registry 0.1.485' は既にインストールされていました。 再インストールしますか? [y/N] > n
プラグインのインストールが取り消されました。
```

##IBM Cloud へのログイン

これも[第2回](https://qiita.com/shimauma_Zzzzz/items/99d71965dad142f93e5b#ibm-cloud-%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3) を参照してログインしてください。

##リージョンのセット

ガイドに従ってリージョンをセットします。
ガイド内のコマンドは、ご自身の選択によって最適な内容にセットされていますので
コピー＆ペーストで実施可能です。

```console:Region
# ibmcloud cr region-set ap-north
地域は「ap-north」に設定されました。地域は「jp.icr.io」です。

OK
```

なお、確認する場合は、 region コマンドをそのまま実行すればOKです。

```console:list-region
# ibmcloud cr region
地域「ap-north」をターゲットにしています。地域は「jp.icr.io」です。

OK
```

## 名前空間の作成

名前空間(Namespace)は、Repository 内でイメージを登録する際のイメージ名を登録しておく場所のようなものです。
名前空間が別なら名前が重複しても構いません。
名前空間自体の名前は何でもよいです。　ここでは、 shimauma_zzzzz としています。（大文字はダメでした）

```console:namespace
# ibmcloud cr namespace-add shimauma_zzzzz
No resource group is targeted. Therefore, the default resource group for the account ('Default') is targeted.

Adding namespace 'shimauma_zzzzz' in resource group 'Default' for account Takashi Nagao's Account in registry jp.icr.io...

名前空間「shimauma_zzzzz」は正常に追加されました

OK
```

せっかくなので名前空間が作成されたことも確認しておきましょう。

```console:list-namespace
# ibmcloud cr namespace-list
レジストリー「jp.icr.io」のアカウント「xxxxxxx's Account」用の名前空間をリストしています...

名前空間
shimauma_zzzzz

OK
```

#コンテナイメージの登録・削除

「クイック・スタート」タブに載っているコンテナイメージの登録などを実施してみます。
この記事の中で利用するコンテナイメージは別途ビルドして登録しますが
現時点では作成していませんので、 hello-world を利用します。

IBM Cloud Container Registry にイメージを登録するためには
ローカル環境に pull したイメージ（または作成したイメージ）に
IBM Cloud Container Registry 用の tag を付与し、
push する、ということを行います。

##コンテナイメージの pull

`docker pull` で pull します。　なお、 docker が起動していないとエラーになります。
起動していない場合は `systemctl start docker` で起動してください。

```console:pull
# docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
Digest: sha256:7f0a9f93b4aa3022c3a4c147a449bf11e0941a1fd0bf4a8e6c9408b2600777c5
Status: Image is up to date for hello-world:latest
docker.io/library/hello-world:latest
```

ローカルにあるイメージをリストしてみます。

```console:local_images
# docker images
REPOSITORY                                         TAG                 IMAGE ID            CREATED             SIZE
hello-world                                        latest              bf756fb1ae65        7 months ago        13.3kB
```

##コンテナイメージのタグ付け

次に、ローカルにある hello-world イメージに IBM Cloud Container Registry 向けの tag を付けます。
tag の形式はリポジトリー：tagで、具体的には `jp.icr.io/<my_namespace>/<my_repository>:<my_tag>` です。
東京を選択していない場合は、 jp 部分は他の文字列です(auなど)

```
# docker tag hello-world jp.icr.io/shimauma_zzzzz/default:v1

# docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
hello-world                        latest              bf756fb1ae65        7 months ago        13.3kB
jp.icr.io/shimauma_zzzzz/default   v1                  bf756fb1ae65        7 months ago        13.3kB
```

Image ID は同じですが、　REPOSITORY と TAG 部分が指定した内容に変わったものができていますね。

##コンテナイメージの push

IBM Cloud Container Registry に push します。

```console:push
# docker push jp.icr.io/shimauma_zzzzz/default/hello-world
The push refers to repository [jp.icr.io/shimauma_zzzzz/default/hello-world]
9c27e219663c: Pushed
v1: digest: sha256:90659bf80b44ce6be8234e6ff90a1ac34acbeb826903b02cfa0da11c82cbc042 size: 525
```

IBM Cloud Container Registry 側の イメージをリストしてみます。

```console:image-list
# ibmcloud cr image-list
イメージをリストしています...

リポジトリー                                   タグ   ダイジェスト   名前空間         作成日         サイズ   セキュリティー状況
jp.icr.io/shimauma_zzzzz/default/hello-world   v1     90659bf80b44   shimauma_zzzzz   7 months ago   2.5 kB   サポート対象外 OS

OK
```

イメージがあることがわかりましたね。
なお、セキュリティー状況欄ですが、もし脆弱性のあるイメージを push すると下記のような形で報告されます。
(29件の問題があるようです)
このような場合は、脆弱性の少ない新しいイメージを作り直しましょう。

```console:vulnerable-image
リポジトリー                                       タグ   ダイジェスト   名前空間         作成日         サイズ   セキュリティー状況
jp.icr.io/shimauma_zzzzz/default/hello-world       v1     90659bf80b44   shimauma_zzzzz   7 months ago   2.5 kB   サポート対象外 OS
jp.icr.io/shimauma_zzzzz/default/liberty-counter   v1     2808c31b40af   shimauma_zzzzz   8 months ago   268 MB   29 件の問題
```

##イメージの削除

不要なイメージを削除する場合は、  `ibmcloud cr image-rm` を行います。

```console:image-rm
# ibmcloud cr image-rm jp.icr.io/shimauma_zzzzz/default/hello-world:v1
イメージ「jp.icr.io/shimauma_zzzzz/default/hello-world:v1」を削除しています...

イメージ「sha256:90659bf80b44ce6be8234e6ff90a1ac34acbeb826903b02cfa0da11c82cbc042」を正常に削除しました

OK
```

#その他の操作・確認

これまでのところで、コンテナイメージの pull / tag / push / rm を行うことができるようになりました。
それ以外の部分で、プランと使用状況は確認しておくようにしましょう。
「設定」タブを参照します。

![29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/d9b331cb-fb21-b2dc-4af0-3b79de5e4482.png)


プランが「無料」であることを確認します。
また、　ストレージ使用料とプル・トラフィックには　以下の制限があります。

- 無料の場合 512MB まで
- 無料の場合 5GB/月まで

超えないように注意しましょう。 （※超えそうになった場合の挙動は確認していません。。)
イメージはすぐ大きくなるのですが、複数のイメージを登録する場合でも イメージ内のレイヤーが同じであれば
2重に保管されたりしないため、同じようなイメージを登録する場合は容量も節約されます。
（下の図では、　275MB のイメージが 2個あり、 単純計算では 550MB でオーバーしますが、
　ほとんど同じイメージのため、容量は1個分＋差分容量です。）

また、削除作業などは GUI で実施するのも結構楽です。
必要に応じて GUI とコマンドを使い分けてもよさそうです。

![30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/da892b87-984a-fd5b-d237-27ed75b6ed68.png)


---
お疲れ様でした。
今回はここまでとし、次回は [5. Db2 on IBM Cloud の準備](https://qiita.com/shimauma_Zzzzz/items/9d3234757bb1c70e98c5) を実施します。

←：[IKS + Db2 on IBM Cloud で DBアクセスアプリを動かしてみた（3.IBM Cloud kubernetes Service (IKS) の準備）](https://qiita.com/shimauma_Zzzzz/items/893ea7ca238ca5e2b1c7)
↑：[IKS + Db2 on IBM Cloud で DBアクセスアプリを動かしてみた（1.概要）](https://qiita.com/shimauma_Zzzzz/items/9a513abdf02d11fff55b)
→：[IKS + Db2 on IBM Cloud で DBアクセスアプリを動かしてみた（5. Db2 on IBM Cloud の準備）](https://qiita.com/shimauma_Zzzzz/items/9d3234757bb1c70e98c5)

---