前回、WSL2 に Docker Engine をインストールしました。
この Docker Engine を使って、Oracke DB 19c を構築していきます。
※このDBは、Oracle DB 19c の練習用に使うつもりのため、Oracle が提供しているサンプルデータベースファイル(サンプルのテーブルやレコードのセット)を設置していきます
目次(流れ)
- Build Oracle DB 19c Docker Image
- Create Oracle DB Container
- Test
注)
この作業を行うためには、およそ 25GB以上のストレージ空き容量が必要です
1. Build Oracle DB 19c Docker Image
1-1 Oracle DB Docker Images ダウンロード
※ここには、Oracle DB Docker Image をビルドするためのスクリプトなどが入っています
$ git clone https://github.com/oracle/docker-images.git
Cloning into 'docker-images'...
remote: Enumerating objects: 15204, done.
remote: Counting objects: 100% (66/66), done.
(略)
1-2 Oracle DB 19c DB ソフトウェア ダウンロード
※ダウンロードするためには、Oracle アカウント(無料作成可)が必要になります
https://www.oracle.com/jp/database/technologies/oracle-database-software-downloads.html
1-3 Docker image ビルド
ダウンロードしたファイル(ファイル名:LINUX.X64_193000_db_home.zip)を以下(19.3.0ディレクトリ内)に設置します。
{任意のパス}/docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0/
{任意のパス}/docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0/LINUX.X64_193000_db_home.zip
以下のコマンドでビルドが開始されます。
環境に依りますが、所要時間30分、ストレージ使用が20GBほど消費されます。
$ sudo {任意のパス}/docker-images/OracleDatabase/SingleInstance/dockerfiles/buildContainerImage.sh -v 19.3.0 -e -i
(略)
Step 22/22 : CMD exec $ORACLE_BASE/$RUN_FILE
---> Running in e1807b43247b
Removing intermediate container e1807b43247b
---> 3de1d8a5a85b
Successfully built 3de1d8a5a85b
Successfully tagged oracle/database:19.3.0-ee
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
oracle/database 19.3.0-ee 3de1d8a5a85b 52 minutes ago 6.54GB
2. Create Oracle DB Container
2-1 docker-compose ファイル作成
コンテナ作成・起動用の docker-compose ファイルを用意します
version: '3'
services:
do:
image: oracle/database:19.3.0-ee
container_name: myoracledb19
ports:
- 1521:1521
- 5500:5500
volumes:
- ./oradata:/opt/oracle/oradata
- ./startup:/opt/oracle/scripts/startup
environment:
- ORACLE_PWD=oraclepass
- ORACLE_PDB=ORCLPDB1
補足)
- ports 1521: ORACLE DBへの接続は1521ポートを使用するのが慣例
- ports 5500: Oracle Enterprise Manager Database Console の HTTPポート
- volumes startup: Oracle 公式startup ファイルの設置用
- environment ORACLE_PWD: 任意のパスワードでOK
- environment ORACLE_PDB: コンテナ作成時に作られるPDB名(ORCLPDB1 で設定されているのをよく見かける)
2-2 Oracle サンプルデータベース ファイルの設置
$ mkdir oradata startup
※docker-compose.yml のあるディレクトリに作成
$ chmod 777 ./oradata
※好ましくはないですが、コンテナからの書き込みを容易に実現するために権限をフルに
$ ls
docker-compose.yml docker-images oradata startup
サンプルデータベース ファイルをダウンロードして、startup ディレクトリ内に設置します。
https://www.oracletutorial.com/wp-content/uploads/2019/01/oracle-sample-database.zip
$ ls startup/
01_ot_create_user.sql 02_ot_schema.sql 03_ot_data.sql
※ot_drop.sql は今回は使いません
2-3 Oracle DB コンテナ作成・起動
$ docker-compose up -d
Creating network "docker-oracledb_default" with the default driver
Creating myoracledb19 ... done
※ログを監視(初回は20分ほどかかる)
$ docker-compose logs -ft
(略)
myoracledb19 | 2022-xx-xxTxx:xx:xx.807396600Z The Oracle base remains unchanged with value /opt/oracle
myoracledb19 | 2022-xx-xxTxx:xx:xx.896814600Z The Oracle base remains unchanged with value /opt/oracle
myoracledb19 | 2022-xx-xxTxx:xx:xx.950470100Z #########################
myoracledb19 | 2022-xx-xxTxx:xx:xx.950533000Z DATABASE IS READY TO USE!
myoracledb19 | 2022-xx-xxTxx:xx:xx.950544300Z #########################
(略)
myoracledb19 | 2022-xx-xxTxx:xx:xx.031394300Z XDB initialized.
myoracledb19 | 2022-xx-xxTxx:xx:xx.031457600Z ORCLPDB1(3):Resize operation completed for file# 10, old size 327680K, new size 337920K
3. Test
3-1 動作確認
sqlplus(OracleDBクライアントツール)を起動してみます。
"oraclepass" は、docker-compose で指定したパスです。
"ORCLCDB" は、固定値。(docker-compose で指定したPDBとは違う)
$ docker exec -it myoracledb19 sqlplus SYSTEM/oraclepass@ORCLCDB
SQL*Plus: Release 19.0.0.0.0 - Production on Sun Jan 30 03:40:01 2022
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Last Successful login time: Sat Jan 22 2022 00:49:58 +00:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL>
SQL> SHOW con_name;
CON_NAME
------------------------------
CDB$ROOT
"CDB$ROOT" という名前のルート・コンテナに接続できていることが確認できました。
どのCDBにも、CDB$ROOTという名前のルート・コンテナが1つ存在しています。
ここには、PDBの管理に必要なシステム・メタデータが格納されていて、すべてのPDBはこのルート・コンテナに属しているようです。
こういった練習環境をローカルに用意しておけば、気軽にコマンドを試したり、表示された内容を調べることが出来るので、理解が深まりやすいと思います。