Oracle Cloud Infrastructure Registry (OCIR)を使ってみよう

オンプレミスでDocker Registryを構築する手順を[別の記事](https://qiita.com/shakiyam/items/8f23ae73a0acd6ae493e)に書きましたが、運用を考えるとクラウドで提供されているサービスを利用した方が楽ですね。この記事ではOracle Cloud Infrastructure (OCI)で提供されている可用性の高いプライベート・コンテナ・レジストリ・サービスである[Oracle Cloud Infrastructure Registry (OCIR)](https://cloud.oracle.com/ja_JP/containers/registry)を使う手順をまとめています。

事前準備
--------

まずは、OCI上にOCIRの管理ユーザーなど必要なリソースを作成していきます。

ブラウザで、[Oracle Cloud Infrastructure](https://console.us-ashburn-1.oraclecloud.com/#/a/)のコンソールにアクセスしてください。

OCIコンソールでメニューを展開し、[Identity] - [Users]を選択します。

![OCIコンソール Identity - Users](https://qiita-image-store.s3.amazonaws.com/0/174/97c603d4-d660-2fa7-0dcf-5c865cb70a61.png)

[Create User]を選択し、OCIRの管理ユーザーとしてregistry-managerというユーザーを作成します。

![Create User](https://qiita-image-store.s3.amazonaws.com/0/174/bc4503b9-78e9-98cc-6763-a9584fa4aa76.png)

ユーザーが作成されるとUsersに表示されるので、作成された[registry-manager]を選択し、[Auth Tokens]で[Generate Token]を選択します。

![Auth Tokens](https://qiita-image-store.s3.amazonaws.com/0/174/6cb036f2-71bb-a888-773b-32771a879405.png)

DESCRIPTIONにregistry-tokenを入力し、作成されたトークン(スクリーンショットでは 4(vmAFE):(Ex8:uAIAZc )をメモしておきます。

![Generate Token](https://qiita-image-store.s3.amazonaws.com/0/174/f0b4ec03-eb55-dc80-26e3-95efc3cdd204.png)

![Generated Token](https://qiita-image-store.s3.amazonaws.com/0/174/ba82e287-d7a9-baf0-a51b-e3ab24291b50.png)

次に、メニューで[Identity] - [Groups]を選択し、[Create Group]で管理グループとしてregistry-managersというグループを作成します。

![Create Group](https://qiita-image-store.s3.amazonaws.com/0/174/96db603e-663d-2c7c-e4c5-a239d41d4fb9.png)

グループが作成されるとGroupsに表示されるので、作成された[registry-managers]を選択し、[Add User to Group]を選択します。USESRで[registry-manager]を選択し、グループにユーザーを追加します。

![Add User to Group](https://qiita-image-store.s3.amazonaws.com/0/174/dde1f648-a50a-072c-96a9-d7d7dda6d1fd.png)

最後に、メニューで[Identity] - [Policies]を選択し、[Create Policy]でregistry-managers-policyというポリシーを作成します。STATEMENTには以下の文を記入します。

```
Allow group registry-managers to manage repos in tenancy
```

![Create Policy](https://qiita-image-store.s3.amazonaws.com/0/174/37298249-e638-4a9d-dd64-9b0351bbc080.png)

これで、registry-managerというユーザーがOCIRにアクセスできるようになりました。

OCIRを使ってみよう
------------------

docker loginでOCIRにログインします。OCIRのサーバーは &lt;リージョン・コード&gt;.ocir.iod 、ユーザー名は &lt;テナンシー名&gt;/&lt;ユーザー名&gt;、パスワードは事前準備で作成したトークンです。ご自身の環境に合わせて、下記の表から適切なリージョン・コードを見つけてください。

リージョン・コード | リージョン名
-------------------|-----------
fra                | Frankfurt
iad                | Ashburn
lhr	               | London
phx	               | Phoenix

下記の例ではAshburnでホストされているshakiyamというテナンシーのOCIRにログインしています。

```
echo '4(vmAFE):(Ex8:uAIAZc' | docker login iad.ocir.io -u shakiyam/registry-manager --password-stdin
```

Docker Hubからイメージを手に入れ、自分のOCIR上にタグ付けします。タグ付けの形式は、&lt;リージョン・コード&gt;.ocir.io/&lt;テナンシー名&gt;/&lt;リポジトリ名(オプション)&gt;/&lt;イメージ名&gt;:&lt;タグ&gt;です。

```
docker image pull hello-world:latest
docker image tag hello-world:latest iad.ocir.io/shakiyam/hello-world:latest
```

タグ付けしたイメージをpushします。

```
docker push iad.ocir.io/shakiyam/hello-world:latest
```

OCIコンソールでメニューを展開し、[Developer Services] - [Registry]を選択します。

![Registry](https://qiita-image-store.s3.amazonaws.com/0/174/3989631e-ba6c-7379-3018-b18520cff716.png)

イメージがpushできていることが確認できます。

参考
----

この記事では管理用のユーザーしか作成しませんでしたが、OCIRのリポジトリでユーザーが実行できる操作はきめ細かく制御できます。詳細はOCIRのマニュアルをご参照下さい。

* 英語マニュアル [Overview of Registry](https://docs.cloud.oracle.com/iaas/Content/Registry/Concepts/registryoverview.htm)
* 日本語マニュアル [Registryの概要](https://docs.oracle.com/cd/E97706_01/Content/Registry/Concepts/registryoverview.htm)