Dockerで構築したOracle Database のPre-Builtを試す

# はじめに

DockerでOracle Databaseを構築した場合、コンテナの起動に時間がかかることがあります。下記URLではその解決策として、Pre-Builtが紹介されています。

https://github.com/oracle/docker-images/blob/main/OracleDatabase/SingleInstance/samples/prebuiltdb/README.md

この記事では、実際にPre-Buildを試してみた手順を紹介します。

# 作成手順

## 1. Imageの作成

以下の手順にしたがって、Oracle DatabseのImageを作成します。

https://github.com/oracle/docker-images/tree/main/OracleDatabase/SingleInstance

ここでは、Oracle Database 21c の Express Edition を利用します。

```
git clone https://github.com/oracle/docker-images.git
cd docker-images/OracleDatabase/SingleInstance/dockerfiles/
./buildContainerImage.sh  -x -v 21.3.0
```

## 2. Containerの作成

```
docker run -d --name oracle-build -e ORACLE_PWD=passw0rd oracle/database:21.3.0-xe
```

ORACLE_PWDにはSYS・SYSTEM・PDBADMINのパスワードを指定します。このパスワードは必ず控えておくこと。pre-built imageから起動したOracle Databseはここで指定したパスワードを利用します。

```
#########################
DATABASE IS READY TO USE!
#########################
```

`docker logs`などで`oracle-build`のログをチェックし、上記のようなログが出力されたことを確認できたら、`oracle-build`を停止します。

```
docker stop oracle-build
```

## 4. Pre-built Image の作成

Pre-built Imageを作成します。Tagは`oracle/db-prebuilt:21.3.0-xe`とします。

```
docker commit oracle-build oracle/db-prebuilt:21.3.0-xe
```

## 5. Containerの削除

`oracle-build`を削除します。

```
docker rm oracle-build
```

# 稼働確認

Pre-Builtしたイメージを利用してみましょう。

まずContainer作成時に実行したいSQLファイルを`./startup`ディレクトリに設置します。ここでは例として、HRDATAというテーブルスペースにHRスキーマを作成、employeesテーブルとテストデータを投入します。

```./startup/install.sql
ALTER SESSION SET CONTAINER=XEPDB1;

CREATE TABLESPACE HRDATA DATAFILE '/opt/oracle/oradata/HRDATA.DBF' SIZE 10M AUTOEXTEND ON;
CREATE USER HR IDENTIFIED BY HRPASSW0RD DEFAULT TABLESPACE HRDATA QUOTA UNLIMITED ON HRDATA;
GRANT CREATE SESSION TO HR;

ALTER SESSION SET CURRENT_SCHEMA=HR;

CREATE TABLE employees (id INT NOT NULL PRIMARY KEY, name VARCHAR2(100));
INSERT INTO employees VALUES (1, 'Alice');
INSERT INTO employees VALUES (2, 'Bob');
INSERT INTO employees VALUES (3, 'Carol');
```

Containerを作成します。

```
docker run -d --rm -p 1521:1521 -p 5500:5500 \
   -v ./startup:/opt/oracle/scripts/startup \
   oracle/db-prebuilt:21.3.0-xe
```

任意のDBクライアントで接続を確認します。`HR/HRPASSW0RD@localhost:1521/XEPDB1`に接続すると、HR.EMPLOYEESテーブルとテストデータが作成されていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/928ca063-74ef-86cc-b076-31a8eadfa59d.png)


# 環境情報

```
C:\>ver

Microsoft Windows [Version 10.0.22631.3593]

C:\>wsl --version
WSL バージョン: 2.0.14.0
カーネル バージョン: 5.15.133.1-1
WSLg バージョン: 1.0.59
MSRDC バージョン: 1.2.4677
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows バージョン: 10.0.22631.3593

C:\>docker version
Client:
 Cloud integration: v1.0.35+desktop.5
 Version:           24.0.7
 API version:       1.43
 Go version:        go1.20.10
 Git commit:        afdd53b
 Built:             Thu Oct 26 09:08:44 2023
 OS/Arch:           windows/amd64
 Context:           default

Server: Docker Desktop 4.26.1 (131620)
 Engine:
  Version:          24.0.7
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.10
  Git commit:       311b9ff
  Built:            Thu Oct 26 09:08:02 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.25
  GitCommit:        d8f198a4ed8892c764191ef7b3b06d8a2eeb5c7f
 runc:
  Version:          1.1.10
  GitCommit:        v1.1.10-0-g18a0cb0
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
```