Oracle Container Registry から Oracle Database EE 21c をプルして使えるようにしてみた



前回の記事でWSL上からDockerを使えるようにしたので、早速コンテナをプルっとやってみる。

前回の記事はこちら

https://qiita.com/T4phage25nm/items/c13646b90006a309619d


今回は、Oracle Container RegistryというDockerレジストリにあるOracle Database Enterprise Edition(EE) 21cのDockerイメージをプルする。

| Dockerレジストリの名前 | Dockerイメージの名前 |
|:-:|:-:|
| Oracle Container Registry | Oracle Database EE 21c |

Oracle Database EE 21cをプルするだけで、「OracleLinux7+初期設定済みのEE」のセットがついてくるらしい。Dockerはとても楽だ。

最後にデータベースへの接続テストをやっておしまい。


## 引用資料

ここに今回の記事の内容全部書いてある。

### Oracle® Linux Oracle Container Runtime for Dockerユーザー・ガイド

第6章 Dockerレジストリの使用

https://docs.oracle.com/cd/F22978_01/docker/docker-registry.html

### Oracle Database EE イメージの説明ページ（英語）

https://container-registry.oracle.com/ords/f?p=113:4:113291129106767:::4:P4_REPOSITORY,AI_REPOSITORY,AI_REPOSITORY_NAME,P4_REPOSITORY_NAME,P4_EULA_ID,P4_BUSINESS_AREA_ID:9,9,Oracle%20Database%20Enterprise%20Edition,Oracle%20Database%20Enterprise%20Edition,34,0&cs=3Moby-jRGFSsRbBG0iUZB6ZSrmecSDgqq5s8SdLLEwi3o2dS0N3g0b5QH57YcQm0XvBjAp2EiXZmMYGLlEceLEg



## 環境

+ Windows 10 Pro バージョン 21H2 （OSビルド 19044.1645)
+ WSL 2
+ Oracle Linux 8.5
+ Docker version 20.10.14, build a224086

## インストールするもの

+ Oracle Database EE 21c のDockerイメージ



## プルの事前準備

### Oracle Account の作成

元からアカウントを持ってたのでここは飛ばした。

> Oracle Container Registryには、ライセンスされた商用Oracleソフトウェア製品のイメージが含まれています。 Oracle Container Registry上でライセンスされているソフトウェア用のイメージをプルするには、Oracle Accountを所有している必要があります。 次のものを使用してOracle Accountを作成できます:
>
>https://profile.oracle.com/myprofile/account/create-account.jspx

### Oracle Container Registry のWebページに接続する

下記リンクへ飛ぶ。

https://container-registry.oracle.com

[Oracle Database Enterprise Edition] を使いたいので、
右側の[続行]ボタンを押して、規約に同意する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2630831/5c788a90-432c-b323-4196-0b6b5cb90cfe.png)

[続行]→[✅]に変わった。

### ホストOS（WSL）で認証

`#`マークが先頭にあるので、rootユーザに切り替えてからやる。

```console:
$ sudo -s
# docker login container-registry.oracle.com
```

Oracle Account のログイン・パスワードで認証した。

これでOracle製品のDockerイメージをプルできるようになった。




## Dockerイメージのプル

まず、`pull`コマンドを打つ。

```consoel:root
# docker pull container-registry.oracle.com/database/enterprise:latest
```

8.15GBあるので少し時間がかかった。

インストールされたか確認をする。

```console:
# docker images
REPOSITORY                                          TAG       IMAGE ID       CREATED        SIZE
container-registry.oracle.com/database/enterprise   latest    e592d69e5258   2 months ago   8.15GB
```

もう必要がないので、ログアウトをしておく。

```consoel:root
# docker logout container-registry.oracle.com
```




## データベースの起動と接続テスト

次に初期設定や接続テストなどをやっていく。

### インスタンスの起動

`run`コマンドが下記の通り書いてあるのだが、そのまま実行してもエラーになる。

> $ docker run -d --name \<oracle-db>
>container-registry.oracle.com/database/enterprise:21.3.0.0

`<oracle-db>`を適当な名前に置き換えて（便宜上`oracledb`とする）、改行せずに入れれば良いみたいだった。

```console
$ docker run -d --name oracledb container-registry.oracle.com/database/enterprise
```

起動中のコンテナを確認してみる。

```
$ docker ps
CONTAINER ID   IMAGE                                               COMMAND                  CREATED              STATUS                                 PORTS     NAMES
3a8ff2cc6863   container-registry.oracle.com/database/enterprise   "/bin/sh -c 'exec $O…"   About a minute ago   Up About a minute (health: starting)             oracledb
```

さっき命名した`oracledb`コンテナがちゃんと動いてた。

### コンテナ内からの接続

ここでのコンテナ内とは、Dockerコンテナ内のOracleLinux7を指す。

下記の４つの接続方法が書かれていたのだが、今回はそのうち３つを試す。

> $ docker exec -it \<oracle-db> sqlplus / as sysdba
> $ docker exec -it \<oracle-db> sqlplus sys/\<your_password>@\<your_SID> as sysdba
> $ docker exec -it \<oracle-db> sqlplus system/\<your_password>@\<your_SID>
> $ docker exec -it \<oracle-db> sqlplus pdbadmin/\<your_password>@\<your_PDBname>

### 知りたいものリスト

+ \<your_password>
+ \<your_SID>
+ \<your_PDBname>



ちなみに、`sqlplus / as sysdba`とやったら`ORA-12162`エラーになった。

```console
$ docker exec -it oracledb sqlplus / as sysdba

SQL*Plus: Release 21.0.0.0.0 - Production on Tue Apr 26 10:26:08 2022
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

ERROR:
ORA-12162: TNS:net service name is incorrectly specified


Enter user-name:
```

`ORA-12162`エラーの原因は環境変数に`$ORACLE_SID`を設定してないからだそうだ。[^1]
`$ORACLE_SID`は`run`時の引数に設定する必要があったそうだが、知らなかった。
諦めて別の簡易接続ネーミング・メソッドを試すことにする。


### ＜your_password＞の初期設定をする

パスワードは適当に決める。
ここでは便宜上`password`とする。

```console
$ docker exec oracledb ./setPassword.sh password
```

### ＜your_SID＞をログから調べる

ログから接続情報などを確認できる。

```config
$ docker logs oracledb

～中略～

Database Information:
Global Database Name:ORCLCDB
System Identifier(SID):ORCLCDB
Look at the log file "/opt/oracle/cfgtoollogs/dbca/ORCLCDB/ORCLCDB.log" for further details.

～中略～
```

\<your_SID>は`ORCLCDB`とわかった。

### CDB に接続

設定したパスワードでCDB（コンテナ・データベース）に接続してみる。

```console
$ docker exec -it oracledb sqlplus sys/password@ORCLCDB as sysdba
```

今度は接続できた。

### ＜your_PDBname＞をSQLコマンドで調べる

先程接続したCDBで、自動作成されたPDB（プラガブル・データベース）の名前を調べる。

```sql:SQL*Plus
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB1                       READ WRITE NO
```

\<your_PDBname>は`ORCLPDB1`とわかった。

### PDB に接続

`exit`コマンドで一度SQL*Plusから切断してから、
PDBにも接続してみる。

```console
$ docker exec -it oracledb sqlplus pdbadmin/password@ORCLPDB1
```

こちらも接続できた。

コンテナ内からの接続テストは完了した。

次は手順的にコンテナ外から接続テストをしてみるのだが、ホストOSにSQL*Plusをインストールしていないことに気付いたので、長くなりそうだし次の記事でやろうと思う。

## 次回予告

+ ホストOSからの接続テスト
+ Webからの接続テスト
+ Windowsからの接続テスト



## 余談

### Linuxカーネルの最新化
前回インストールしたときに忘れていたので、やっておく。

```posh:powershell
wsl --update
```

更新はなかった。

### dnfパッケージの最新化

```console
$ sudo dnf update
```

更新した。

### WSLのバックアップ作成

WSLをディストリビューションごとにバックアップできる。

```posh:powershell
wsl --export OracleLinux_8_5 OracleLinux_8_5.tar
```

tarファイルの保存場所は`%UserProfile%`の下にある。
WindowsOSを再インストールするときなどに使えそう。

### logファイルの中身を覗いてみる

logの中にさらにlogファイルのパスが書かれていた。
下記のように`docker exec <コンテナ名> <コマンド>`とすることで、コンテナ上で各種コマンドを実行できるらしい。

`more`でlogファイルの中身を覗いてみる。

```console
$ docker exec oracledb more /opt/oracle/cfgtoollogs/dbca/ORCLCDB/ORCLCDB.log
```

見てもよくわからなかった。




## 参考資料

今回引用はしなかったけど、参考になりそうだったもの。

+ https://docs.oracle.com/cd/F39414_01/deeck/index.html#DEEDK-GUID-EDA557B2-B0D6-45E1-8FBD-C1D756803982





[^1]:https://ja.visual-foxpro-programmer.com/oracle-12c-ora-12162