はじめに
DockerでOracle Databaseを構築した場合、コンテナの起動に時間がかかることがあります。下記URLではその解決策として、Pre-Builtが紹介されています。
この記事では、実際にPre-Buildを試してみた手順を紹介します。
作成手順
1. Imageの作成
以下の手順にしたがって、Oracle DatabseのImageを作成します。
ここでは、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テーブルとテストデータを投入します。
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テーブルとテストデータが作成されていることがわかります。
環境情報
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
