WSLのDockerでOracle 23ai Freeを動かす

# 1. はじめに

Windows 11のWSL2のUbuntu上のDockerで、Oracle 23 ai Freeコンテナを動かせるようにします。
インストール後にコマンドhistoryを元に記述しているので抜けがあるかもしれません。

# 2. Oracle 23 ai Dockerイメージダウンロード

```
docker pull container-registry.oracle.com/database/free:latest
```

Dockerイメージの確認。

```
docker images
```

# 3. Oracleコンテナ起動

コンテナの1521ポートを、デフォルトのdocker0ブリッジ(172.17.0.0)にポートフォワードする。同一ブリッジの他のコンテナ、DockerホストのUbuntu、WSLのホストのWindows 11から接続できるようになる。
ポートフォワード設定はdocker runでしかできず、イメージからコンテナを作成後にポートフォワード設定する場合には、コンテナをdocker commitしてイメージとして保存し、docker runし直す必要がある。
ブリッジのIPアドレスがWSLが自動的に振るIPアドレスとぶつかる場合があるので要注意らしい。
Oracle 23 ai DockerイメージがRHEL 8.9ベースで、Oracleのリポジトリに繋がらず、firewalldが入っていないので、同一ブリッジから繋ぎ放題。
--nameは任意の名称。

```
docker run -d --name oracle-db -e ORACLE_PWD=＜systemユーザーに設定するパスワード＞ -p 1521:1521 container-registry.oracle.com/database/free
```

コンテナの確認。-aで止まっているコンテナも表示される。

```
docker ps -a
```

接続してIPアドレス確認。
```
docker exec -it oracle-db bash
```

```
ifconfig
```

自分の場合は 172.17.0.2 でした。

DB接続確認。

```
sqlplus system/＜設定したパスワード＞
```

または、

```
sqlplus system/＜設定したパスワード＞@localhost:1521/FREEPDB1
```

```
SELECT SYSDATE FROM DUAL;
```

```
EXIT
```

# 4. 動作確認用にAlmaLinuxイメージダウンロード、起動

実施時点では最新は9.4でした。

```
docker image pull almalinux
```

--nameは任意。

```
docker run -it --name myalmalinux almalinux:latest /bin/bash
```

# 5. Oracle Instant Client 21ダウンロード

Windows 11でダウンロードしました。
ダウンロードページの最新の Oracle Instant Client 21を使いましたが、後述の 公式情報の ld.so.conf の設定のコマンド例だと instantclient_23_3 となっているので、どこかに23がある？ 見つからなかった。


Oracle Instant Client - Oracle Databaseに接続するための無償のツールとライブラリ | Oracle 日本
https://www.oracle.com/jp/database/technologies/instant-client.html

Oracle Instant Client Downloads | Oracle 日本
https://www.oracle.com/jp/database/technologies/instant-client/downloads.html

# 5.1. Linux 64bit

Linux x86-64用Instant Client（64ビット） | Oracle 日本
https://www.oracle.com/jp/database/technologies/instant-client/linux-x86-64-downloads.html

インストール時点の最新が21.11.0.0.0。
自分が必要なものをダウンロードする。

Basicパッケージ（ZIP）	
instantclient-basic-linux.x64-21.11.0.0.0dbru.zip

SQL*Plusパッケージ（ZIP）	
instantclient-sqlplus-linux.x64-21.11.0.0.0dbru.zip

ツール・パッケージ（ZIP）	
instantclient-tools-linux.x64-21.11.0.0.0dbru.zip

SDKパッケージ（ZIP）	
instantclient-sdk-linux.x64-21.11.0.0.0dbru.zip

JDBC Supplementパッケージ（ZIP）	
instantclient-jdbc-linux.x64-21.11.0.0.0dbru.zip

ODBCパッケージ（ZIP）	
instantclient-odbc-linux.x64-21.11.0.0.0dbru.zip

プリコンパイラ・パッケージ(Pro*CとPro*COBOL用の追加ファイル) は必要に応じて。

ダウンロードしたファイルをLinuxコンテナへコピーする。
WSLのUbuntu(等)で、

```
cd /mnt/C/Users/＜Windowsユーザー名＞/Downloads/
docker cp instantclient-basic-linux.x64-21.11.0.0.0dbru.zip myalmalinux:/tmp/
docker cp instantclient-sqlplus-linux.x64-21.11.0.0.0dbru.zip myalmalinux:/tmp/
docker cp instantclient-odbc-linux.x64-21.11.0.0.0dbru.zip myalmalinux:/tmp/
docker cp instantclient-tools-linux.x64-21.11.0.0.0dbru.zip myalmalinux:/tmp/
docker cp instantclient-sdk-linux.x64-21.11.0.0.0dbru.zip myalmalinux:/tmp/
```

# 5.2. Windows 64bit

Microsoft Windows（x64）64ビット用Oracle Instant Client | Oracle 日本
https://www.oracle.com/jp/database/technologies/instant-client/winx64-64-downloads.html

インストール時点の最新が21.9.0.0.0。
自分が必要なものをダウンロードする。

Basicパッケージ	
instantclient-basic-windows.x64-21.9.0.0.0dbru.zip

SQL*Plus パッケージ	
instantclient-sqlplus-windows.x64-21.9.0.0.0dbru.zip

ツール・パッケージ	
instantclient-tools-windows.x64-21.9.0.0.0dbru.zip

SDK パッケージ	
instantclient-sdk-windows.x64-21.9.0.0.0dbru.zip

JDBC Supplement パッケージ	
instantclient-jdbc-windows.x64-21.9.0.0.0dbru.zip

ODBC パッケージ	
instantclient-odbc-windows.x64-21.9.0.0.0dbru.zip

プリコンパイラ・パッケージ(Pro*CとPro*COBOL用の追加ファイル) は必要に応じて。

# 6. Oracle Instant Client 21インストール

# 6.1. Linux(AlmaLinux 9.4)

rootで作業する。

・oracleユーザー作成(なくてもいい)

```
dnf install passwd zip
useradd oracle
passwd oracle
```

・ダウンロードしたzipを /home/oracle に全て展開する。(/home/oracle/instantclient_21_11/ ができて全てその中に入る)

```
su - oracle
unzip /tmp/instantclient-basic-linux.x64-21.11.0.0.0dbru.zip
unzip /tmp/instantclient-sqlplus-linux.x64-21.11.0.0.0dbru.zip
unzip /tmp/instantclient-odbc-linux.x64-21.11.0.0.0dbru.zip
unzip /tmp/instantclient-tools-linux.x64-21.11.0.0.0dbru.zip
unzip /tmp/instantclient-sdk-linux.x64-21.11.0.0.0dbru.zip
```

```
export ORACLE_HOME=/home/oracle/instantclient_21_11
```

```
export PATH=$PATH:$ORACLE_HOME
```

```
export LD_LIBRARY_PATH=$ORACLE_HOME
```

これだけだと.so不足でsqlplusが動かない。
不足ライブラリはlddコマンドで確認できる。

```
dnf install libaio
```

libclntshcore.so 等が存在するのにどうしてもnot foundになる。
公式情報の通りに ld.so.conf でsoファイルが見ることができるようにする。

OCI用のInstant Clientライブラリ
https://docs.oracle.com/cd/F82042_01/lacli/instant-client-shared-libraries.html

```
echo /opt/oracle/instantclient_21_11 > /etc/ld.so.conf.d/oracle-instantclient.conf
ldconfig
```

```
sqlplus system/＜設定したパスワード＞@＜oracle-dbコンテナのIPアドレス＞:1521@FREEPDB1
```

```
SELECT SYSDATE FROM DUAL;
```

```
EXIT
```

ついで。

```
dnf install unixODBC
```

# 6.2. Windows 11

ダウンロードしたzipを展開して任意のパスに置く。例：C:\instantclient_21_9\

コマンドプロンプトかPowerShellでそのディレクトリに移動し、

```
sqlplus system/＜設定したパスワード＞@＜oracle-dbコンテナのIPアドレス＞:1521@FREEPDB1
```

```
SELECT SYSDATE FROM DUAL;
```

```
EXIT
```