LoginSignup
0
0

Oracle検証環境をDocerで構築した話

Posted at

Oracle19cをWindows11にインストール

目次

  1. インストール証跡
  2. 触ってみる
  3. 参考
  4. To be continued...

オリジナルイメージの作成

:scroll: やりたいこと

Oracle19cの検証環境(個人用に好き勝手に遊んでいい環境)を作って本で読んだ知識をハンズオン形式に学習したい

:hammer: やったこと

ローカルを汚染したくない、かつリ簡単にビルドできるようにしたい(環境を作っては捨て、作っては捨てるサイクルをサクッとやりたい)ので、流行りのコンテナを使用して環境構築する。

前提

  • Windows11 HomeにDocker Desktopをインストールしてコンテナを構築します
  • シェルスクリプトファイルを実行するため、Linux環境(WSL2)が必要です
  • Oracle Database 19c for Linux x86-64をコンテナにインストールします
  • Docker Desktop:4.27.2
  • エディタは、Vscodeを使用します。

本記事では、Docker Desktop及びWSL2をインストール済みという前提で進みます。
未インストールの場合は、インストール後に戻ってきてください。

:inbox_tray: gitからDocker imageをclone

gitからDocker imageをclone
C:\OracleTest>git clone https://github.com/oracle/docker-images.git
Cloning into 'docker-images'...
remote: Enumerating objects: 17584, done.
remote: Counting objects: 100% (2158/2158), done.
remote: Compressing objects: 100% (408/408), done.
remote: Total 17584 (delta 1844), reused 1895 (delta 1738), pack-reused 15426
Receiving objects: 100% (17584/17584), 15.11 MiB | 16.92 MiB/s, done.
Resolving deltas: 100% (10369/10369), done.

:inbox_tray: Oracle公式から19cをダウンロード

image.png

オリジナルImageの作成

提供されているシェルスクリプトファイルを実行してオリジナルImageを作成します。
:exclamation: Windowsではシェルスクリプトファイルを実行できないので、Ubuntuで実行します。

オリジナルImageの作成
<ユーザ名>@<ホスト名>:/mnt/c/oracletest/docker-images/oracledatabase/singleinstance/dockerfiles$ ./buildContainerImage.sh -v 19.3.0 -e -i

# ~省略~

Server:
 Containers: 1
  Running: 0
  Paused: 0
  Stopped: 1
 Images: 3
 Server Version: 25.0.3
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: ae07eda36dd25f8a1b98dfbf587313b99c0190bb
 runc version: v1.1.12-0-g51d5e94
 init version: de40ad0
 Security Options:
  seccomp
   Profile: unconfined
 Kernel Version: 5.15.133.1-microsoft-standard-WSL2
 Operating System: Docker Desktop
 OSType: linux
 Architecture: x86_64
 CPUs: 16
 Total Memory: 15.59GiB
 Name: docker-desktop
 ID: 1fb14317-26a9-4536-906c-7e20c71815d4
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http.docker.internal:3128
 HTTPS Proxy: http.docker.internal:3128
 No Proxy: hubproxy.docker.internal
 Experimental: false
 Insecure Registries:
  hubproxy.docker.internal:5555
  127.0.0.0/8
 Live Restore Enabled: false

# ~省略~

What's Next?
  View a summary of image vulnerabilities and recommendations → docker scout quickview


  Oracle Database container image for 'ee' version 19.3.0 is ready to be extended:

    --> oracle/database:19.3.0-ee

  Build completed in 551 seconds.

<ユーザ名>@<ホスト名>:/mnt/c/oracletest/docker-images/oracledatabase/singleinstance/dockerfiles$

:white_check_mark: Docker DesktopのImagesにoracle/databaseが追加されている。

image.png

:white_check_mark: コンソールからもImageを確認

docker images
PS C:\OracleTest\docker-images\OracleDatabase\SingleInstance\dockerfiles> docker images
REPOSITORY                               TAG               IMAGE ID       CREATED          SIZE
oracle/database                          19.3.0-ee         f3483ed6fa25   22 minutes ago   6.54GB

:hammer: コンテナの確認

docker container ls
PS C:\OracleTest> docker container ls   
CONTAINER ID   IMAGE                       COMMAND                  CREATED         STATUS                            PORTS                                            NAMES
60d91216cedd   oracle/database:19.3.0-ee   "/bin/bash -c 'exec …"   5 minutes ago   Up 5 minutes (health: starting)   0.0.0.0:1521->1521/tcp, 0.0.0.0:5500->5500/tcp   oracledb19-20240320

触ってみる

ユーザを作ってみる

ユーザを作成するため、SYSユーザでログインします。
OS認証されてるか確認するため、自分のOSユーザ名をまず確認します。

コンテナに入り込む
PS C:\OracleTest> docker exec -it oracledb19-20240320 bash
bash-4.2$ 

以後、コンテナ内の環境でコマンドを色々と実行していくため、Powershellからコンテナに入り込んでいます。Docker Desktopからコマンド叩いても同じなので、お好きな方でどうぞ。

カレントOSユーザの確認
bash-4.2$ whoami
oracle # OSユーザは「oracle」

次に、oracleというOSユーザがdbaグループに所属しているか確認します。

dbaグループにOSユーザのoracleがある
bash-4.2$ grep 'dba' /etc/group
dba:x:54322:oracle # OSユーザのoracleは、dbaグループに所属していることが分かる
backupdba:x:54324:oracle
dgdba:x:54325:oracle
kmdba:x:54326:oracle
racdba:x:54330:oracle

カレントOSユーザのoracledbaグループに所属していることがわかったので、OS認証でSYSにログインできます。

SYSでログイン
bash-4.2$ sqlplus / as sysdba # OS認証でログイン

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Mar 20 11:19:24 2024
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> show user
USER is "SYS" # SYSユーザでログインできている
コンテナの確認
SQL> show con_name; 

CON_NAME
------------------------------
CDB$ROOT -- CDBのルート
PDBの確認
SQL> select pdb_id, pdb_name from cdb_pdbs order by pdb_id;

    PDB_ID PDB_NAME
---------- --------------------------------------------------------------------------------------------------------------------------------
         2 PDB$SEED
         3 ORCLPDB1 -- docker-compose.yamlで定義したPDB
PDBに接続
SQL> alter session set container = ORCLPDB1;

Session altered.

SQL> show con_name;

CON_NAME
------------------------------
ORCLPDB1
検証用ユーザ作成
SQL> create user user01 identified by password#1;

User created.

ユーザを作っただけではログインできないので、セッション権限を付与。

CREATE SESSION権限付与
SQL> grant create session to user01;

Grant succeeded.

SQL> SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='USER01';

GRANTE PRIVILEGE                                ADM COM INH
------ ---------------------------------------- --- --- ---
USER01 CREATE SESSION                           NO  NO  NO

参考

Oracle Homeの場所
bash-4.2$ echo $ORACLE_HOME
/opt/oracle/product/19c/dbhome_1
spfileのディレクトリ
SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /opt/oracle/product/19c/dbho
LISTENERの起動状況
sh-4.2$ lsnrctl status
# (~省略~)
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
Services Summary...
Service "ORCLCDB" has 1 instance(s).
  Instance "ORCLCDB", status RESTRICTED, has 1 handler(s) for this service...
Service "ORCLCDBXDB" has 1 instance(s).
  Instance "ORCLCDB", status RESTRICTED, has 1 handler(s) for this service...
The command completed successfully

↓数分後

LISTENERの起動状況
h-4.2$ lsnrctl status
# (~省略~)
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=6a6f894672df)(PORT=5500))(Security=(my_wallet_directory=/opt/oracle/admin/ORCLCDB/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "14641d92104b0e8ce063020013ac385d" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "ORCLCDB" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "ORCLCDBXDB" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "orclpdb1" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
The command completed successfully
0
0
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
0
0