Podman DesktopからIBM Cloud Container RegistryにイメージをPUSHしよう

# はじめに

本記事ではタイトルの通り、「Podman Desktopを使ってコンテナイメージをIBM CloudのコンテナレジストリにPUSHする」手順を紹介します。
一部コマンド実行が必要になりますが、ほぼコピー＆ペーストで実施できます。

筆者はMacで実行していますが、Windowsでもコマンドはそのまま利用可能です。

## コンテナレジストリの作成

はじめにPUSH先のコンテナレジストリの準備をします。

IBM Cloudにログインし、左上のナビゲーションメニューを選択し、[Container Registry] > [名前空間]をクリックします。
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/72598b83-28e1-3a28-1527-0a97dc1cc68a.png)

:::note info
Container Registryのサービスが未作成の場合は作成をしてください。
動作確認はライトプランで実施しています。
:::

ロケーションは __東京__ を指定し、[作成]をクリックします。
![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/b8077e9e-378a-3053-185a-6717ceb26a2c.png)

名前を入力し、[作成]をクリックします。
![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/013fe0a4-8408-886b-6df8-8830430588fa.png)

:::note info
今回はpodman-desktop-sampleという名前空間を使用します。
名前空間は一意である必要があるため、ご自身の環境で試す際は違う名前を指定し作成・使用してください。
:::

## 認証情報の作成

名前空間が作成できたら、podmanコマンドでローカルのコンテナイメージをIBM CloudのコンテナレジストリにPUSHするための認証情報を準備します。

画面上部の[管理]から[アクセス(IAM)]をクリックします。
![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/5086c871-52d1-3b36-3fdf-520efdd7945a.png)

管理画面が表示されたら、[APIキー]を選択し、[作成]をクリックします。
![005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/10c277d5-a92e-67e2-26c9-dd54282eb061.png)

ダイアログが表示されたら、APIキーの名前を入力して、[作成]をクリックします。
![006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/a7ba5de1-4868-128a-5a9b-db11d2d83aa7.png)

APIキーの作成が完了したら、コピーしメモ帳などに保管＆ダウンロードをしましょう。
![007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/ac58a15a-b71e-1184-b6a8-0dc9e3c275dd.png)

:::note alert
この画面を閉じると二度と中身を確認できなくなるため、忘れた場合や紛失した場合はキーを削除し、再度作成しましょう。
:::

## コンテナレジストリへのログイン

Podman DesktopでIBM Cloudのコンテナレジストリへログインをしたいところですが、執筆時点ではできないためターミナルでコマンドを実行します。
コマンドを実行し終わると、下記リストに作成した名前空間のコンテナレジストリが追加される様になります。
![008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/ba5532e1-a031-0ad6-0768-0292ce885523.png)

まずはIBM Cloud CLIが必要になるため下記コマンドを実行します。
```cmd
$ ibmcloud plugin install container-registry -r 'IBM Cloud'
```

IBM Cloud CLIがインストールできたら、CLIでIBM Cloudにログインをします。
IBM Cloudの右上のユーザーアイコンをクリックし、[CLIとAPIにログイン]をクリックします。
![009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/567536ce-b8ea-1f01-9c15-e4cbd01f0f28.png)

ワンタイム・パスコードが表示されたら、__IBM Cloud CLI__ に表示されているコマンドをコピーします。
![010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/ca084dde-8833-f211-cc6f-57dfd61bcbf7.png)

:::note alert
このコマンドは第三者に共有しない様に注意してください。
:::

コピーしたコマンドを実行します。
```cmd
$ ibmcloud login -a https://cloud.ibm.com -u passcode -p XXXXXXXXXX
API エンドポイント: https://cloud.ibm.com
認証中です...
OK

ターゲットのアカウント XXX's Account (xxxxxxxxxxxxxxxxxxxxxxx)
```

リージョンを聞かれるので、`jp-tok`を選択します。

```
リージョンを選択します (または Enter キーを押してスキップします):
1. au-syd
2. in-che
3. jp-osa
4. jp-tok
5. kr-seo
6. eu-de
7. eu-gb
8. ca-tor
9. us-south
10. us-east
11. br-sao
数値を入力してください> 4
ターゲットのリージョン jp-tok
```

無事にログインができたら下記情報が表示されます。

```                         
API エンドポイント:      https://cloud.ibm.com
Region:                  jp-tok
ユーザー:                xxx@xxx.com
アカウント:              XXX's Account (xxxxxxxxxxxxxxxxxxxxxxx)
リソース・グループ:      リソース・グループがターゲットになっていません。'ibmcloud target -g RESOURCE_GROUP' を使用してください
CF API エンドポイント:   
組織:                    
スペース:  
```

最後に先ほど作成したAPIキーを使って、PodmanでIBM Cloudのコンテナレジストリにログインをします。
①にはiamapikey、②には控えておいたAPIキーを入力します。
```cmd
$ podman login jp.icr.io
Username: ①
Password: ②(入力内容は画面には表示されません)
Login Succeeded!
```

ログインができたので、Podman DesktopのRegistriesに表示されているか確認してみましょう。
右下の[歯車マーク] > [Registries]をクリックします。
![011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/02081abf-ee48-c0df-6e98-768fab0786af.png)
Podman Desktopでもレジストリが表示されました。

## コンテナイメージをコンテナレジストリにPUSH

今回は`redhat/ubi8-micro` のコンテナイメージを使って動作確認しようと思います。
まずは[Images] > [Pull an image]からイメージをPULLします。
![012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/b9df7cd5-40af-a2b2-d0b6-d26bca3f744a.png)

`redhat/ubi8-micro`を入力し、[Pull image]をクリックします。
![013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/0f3c498a-e725-84ee-160f-bfce6334a64b.png)

完了したら[Done]をクリックします。
![014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/dd145fcb-e486-4825-541e-3c2643bfc253.png)

自身のレジストリにPUSHするために、タグ付けをします。
タグ付けはコマンドで実行する必要があるので下記コマンドを打ちましょう。
```cmd
$ podman tag イメージ jp.icr.io/{名前空間名}/{リポジトリー名}
```

`redhat/ubi8-micro` のコンテナイメージにタグ付けをしてみた場合は下記の様になります。
```cmd
$ podman tag redhat/ubi8-micro jp.icr.io/podman-desktop-sample/ubi8-micro
```

タグ付けができると、GUIはこの様な状態になります。
![015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/92943e09-64ce-4a7b-7254-58971b971ed8.png)

それではレジストリにPUSHしましょう。
ImagesにてPUSHしたいイメージのACTIONSの3点リーダーをクリックし、[Push image]をクリックします。
![016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/b6888714-76fc-4a2c-604c-20c92434a8c1.png)

タグに紐づくイメージが選択できるので、`jp.icr.io/podman-desktop-sample/ubi8-micro`を選択し、[Push image]をクリックします。
![017.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/729da5e5-7440-392b-21b4-23be3e858ec2.png)

PUSHできました。
[Done]をクリックして閉じておきましょう。
![018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/f4bf1d70-d1da-0b6a-56be-31f338f2c570.png)

最後にIBM Cloudのコンテナレジストリを確認してみましょう。
![019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/8b5ef411-c8dc-9589-86f7-12806b0653aa.png)

PUSHしたイメージが確認できました、以上で終了です。