前回の記事でWSL上からDockerを使えるようにしたので、早速コンテナをプルっとやってみる。
前回の記事はこちら
今回は、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レジストリの使用
Oracle Database EE イメージの説明ページ(英語)
環境
- 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ページに接続する
下記リンクへ飛ぶ。
[Oracle Database Enterprise Edition] を使いたいので、
右側の[続行]ボタンを押して、規約に同意する。
[続行]→[✅]に変わった。
ホストOS(WSL)で認証
#
マークが先頭にあるので、rootユーザに切り替えてからやる。
$ sudo -s
# docker login container-registry.oracle.com
Oracle Account のログイン・パスワードで認証した。
これでOracle製品のDockerイメージをプルできるようになった。
Dockerイメージのプル
まず、pull
コマンドを打つ。
# docker pull container-registry.oracle.com/database/enterprise:latest
8.15GBあるので少し時間がかかった。
インストールされたか確認をする。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
container-registry.oracle.com/database/enterprise latest e592d69e5258 2 months ago 8.15GB
もう必要がないので、ログアウトをしておく。
# 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
とする)、改行せずに入れれば良いみたいだった。
$ 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を指す。
下記の4つの接続方法が書かれていたのだが、今回はそのうち3つを試す。
$ 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
エラーになった。
$ 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
とする。
$ docker exec oracledb ./setPassword.sh password
<your_SID>をログから調べる
ログから接続情報などを確認できる。
$ 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(コンテナ・データベース)に接続してみる。
$ docker exec -it oracledb sqlplus sys/password@ORCLCDB as sysdba
今度は接続できた。
<your_PDBname>をSQLコマンドで調べる
先程接続したCDBで、自動作成されたPDB(プラガブル・データベース)の名前を調べる。
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にも接続してみる。
$ docker exec -it oracledb sqlplus pdbadmin/password@ORCLPDB1
こちらも接続できた。
コンテナ内からの接続テストは完了した。
次は手順的にコンテナ外から接続テストをしてみるのだが、ホストOSにSQL*Plusをインストールしていないことに気付いたので、長くなりそうだし次の記事でやろうと思う。
次回予告
- ホストOSからの接続テスト
- Webからの接続テスト
- Windowsからの接続テスト
余談
Linuxカーネルの最新化
前回インストールしたときに忘れていたので、やっておく。
wsl --update
更新はなかった。
dnfパッケージの最新化
$ sudo dnf update
更新した。
WSLのバックアップ作成
WSLをディストリビューションごとにバックアップできる。
wsl --export OracleLinux_8_5 OracleLinux_8_5.tar
tarファイルの保存場所は%UserProfile%
の下にある。
WindowsOSを再インストールするときなどに使えそう。
logファイルの中身を覗いてみる
logの中にさらにlogファイルのパスが書かれていた。
下記のようにdocker exec <コンテナ名> <コマンド>
とすることで、コンテナ上で各種コマンドを実行できるらしい。
more
でlogファイルの中身を覗いてみる。
$ docker exec oracledb more /opt/oracle/cfgtoollogs/dbca/ORCLCDB/ORCLCDB.log
見てもよくわからなかった。
参考資料
今回引用はしなかったけど、参考になりそうだったもの。