LoginSignup
6
4

More than 1 year has passed since last update.

WSL2 の Docker で Oracle DB 19c(練習用) を構築する

Posted at

前回、WSL2 に Docker Engine をインストールしました。
この Docker Engine を使って、Oracke DB 19c を構築していきます。
※このDBは、Oracle DB 19c の練習用に使うつもりのため、Oracle が提供しているサンプルデータベースファイル(サンプルのテーブルやレコードのセット)を設置していきます

目次(流れ)

  1. Build Oracle DB 19c Docker Image
  2. Create Oracle DB Container
  3. 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
oracledbdownload.PNG

1-3 Docker image ビルド

ダウンロードしたファイル(ファイル名:LINUX.X64_193000_db_home.zip)を以下(19.3.0ディレクトリ内)に設置します。

git_cloneでダウンロードしたディレクトリ内
{任意のパス}/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
DockerImageが出来た
$ 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 ファイルを用意します

docker-compose.yml
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とは違う)

sqlplus
$ 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はこのルート・コンテナに属しているようです。

こういった練習環境をローカルに用意しておけば、気軽にコマンドを試したり、表示された内容を調べることが出来るので、理解が深まりやすいと思います。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4