kagamihogeの日記

kagamihogeの日記です。

Docker for WindowsでOracle Database 18c XEうごかす

環境

手順

Docker for Windows準備

https://docs.docker.com/docker-for-windows/からダウンロードしてインストール。

イメージのビルド

https://github.com/oracle/docker-images.gitOracle関連の各種Dockerfileがあるのでチェックアウトしてくる。

OracleDatabase\SingleInstance\dockerfiles\18.4.0\Dockerfile.xe を使用する。このDoclerfileに色々説明が書いてある。

その説明に従い、Oracle XE 18cのバイナリをhttps://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.htmlからダウンロードして、上述のDockerfile.xeと同一ディレクトリに配置する。

コマンドプロンプト開いてOracleDatabase\SingleInstance\dockerfiles\18.4.0\に移動してイメージをビルドする。

docker build -t oracle/database:18.4.0-xe -f Dockerfile.xe .

実行時のログは以下のような感じ。

>docker build -t oracle/database:18.4.0-xe -f Dockerfile.xe .

base:18.4.0-xe -f Dockerfile.xe .
Sending build context to Docker daemon  2.574GB
Step 1/11 : FROM oraclelinux:7-slim
 ---> b19454a5f17a

(中略)

Complete!
Removing intermediate container 9e9e429de83e
 ---> 935f0511899d
Step 8/11 : VOLUME ["$ORACLE_BASE/oradata"]
 ---> Running in dda39dea4b17
Removing intermediate container dda39dea4b17
 ---> 4cc812ed66ec
Step 9/11 : EXPOSE 1521 8080 5500
 ---> Running in 8dc03e2708f0
Removing intermediate container 8dc03e2708f0
 ---> c5306a367b3a
Step 10/11 : HEALTHCHECK --interval=1m --start-period=5m    CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1
 ---> Running in 9aa006ae229b
Removing intermediate container 9aa006ae229b
 ---> e613ed045760
Step 11/11 : CMD exec $ORACLE_BASE/$RUN_FILE
 ---> Running in edd84324c27f
Removing intermediate container edd84324c27f
 ---> dff7f2815b94
Successfully built dff7f2815b94
Successfully tagged oracle/database:18.4.0-xe
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

確認。

>docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
oracle/database     18.4.0-xe           dff7f2815b94        3 minutes ago       8.43GB
oraclelinux         7-slim              b19454a5f17a        6 weeks ago         117MB
hello-world         latest              1815c82652c0        18 months ago       1.84kB

起動

とりあえず、適当にポートフォワーディングの設定で起動する。

docker run -it -p 11521:1521 -p 15500:5500 -p 18080:8080 oracle/database:18.4.0-xe

起動ログはこんな感じ。

>docker run -it -p 11521:1521 -p 15500:5500 -p 18080:8080 oracle/database:18.4.0-xe
ORACLE PASSWORD FOR SYS AND SYSTEM: 15c82b8165fa4f47
Specify a password to be used for database accounts. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9]. Note that the same password will be used for SYS, SYSTEM and PDBADMIN accounts:
Confirm the password:
Configuring Oracle Listener.
Listener configuration succeeded.
Configuring Oracle Database XE.
Enter SYS user password:
*****************
Enter SYSTEM user password:
*****************
Enter PDBADMIN User Password:
****************
Prepare for db operation
7% complete
Copying database files
29% complete
Creating and starting Oracle instance
30% complete
31% complete
34% complete
38% complete
41% complete
43% complete
Completing Database Creation
47% complete
50% complete
Creating Pluggable Databases
54% complete
71% complete
Executing Post Configuration Actions
93% complete
Running Custom Scripts
100% complete
Database creation complete. For details check the logfiles at:
 /opt/oracle/cfgtoollogs/dbca/XE.
Database Information:
Global Database Name:XE
System Identifier(SID):XE
Look at the log file "/opt/oracle/cfgtoollogs/dbca/XE/XE.log" for further details.

Connect to Oracle Database using one of the connect strings:
     Pluggable database: 14799974b6e0/XEPDB1
     Multitenant container database: 14799974b6e0
Use https://localhost:5500/em to access Oracle Enterprise Manager for Oracle Database XE
The Oracle base remains unchanged with value /opt/oracle
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
2018-12-28T08:18:10.880011+00:00
XEPDB1(3):Resize operation completed for file# 10, old size 358400K, new size 368640K
2018-12-28T08:18:13.025781+00:00
XEPDB1(3):CREATE SMALLFILE TABLESPACE "USERS" LOGGING  DATAFILE  '/opt/oracle/oradata/XE/XEPDB1/users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT  1280K MAXSIZE UNLIMITED  EXTENT MANAGEMENT LOCAL  SEGMENT SPACE MANAGEMENT  AUTO
XEPDB1(3):Completed: CREATE SMALLFILE TABLESPACE "USERS" LOGGING  DATAFILE  '/opt/oracle/oradata/XE/XEPDB1/users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT  1280K MAXSIZE UNLIMITED  EXTENT MANAGEMENT LOCAL  SEGMENT SPACE MANAGEMENT  AUTO
XEPDB1(3):ALTER DATABASE DEFAULT TABLESPACE "USERS"
XEPDB1(3):Completed: ALTER DATABASE DEFAULT TABLESPACE "USERS"
2018-12-28T08:18:14.347027+00:00
ALTER PLUGGABLE DATABASE XEPDB1 SAVE STATE
Completed: ALTER PLUGGABLE DATABASE XEPDB1 SAVE STATE

SQL Developerで接続確認

上のログにもある通り、パスワードとかSIDとかは指定しないとデフォルトのものが使われる。

  • SYS AND SYSTEMのパスワード - run時に適当なものが振られる。起動ログのORACLE PASSWORD FOR SYS AND SYSTEM:のとこで確認できる。
  • SID - XE
  • PDB - XEPDB1

SQL Developerで接続確認する。Oracle 18cのマルチコンテナのこと良く分かってないが、左がインスタンスに対してで、右がデフォルトで作られるXEPDB1、に対する接続の一例。ポートフォワーディング11521:1521にしているので、ポートは11521

f:id:kagamihoge:20181228190137j:plain

docker-compose.yml

docker-compose.ymlをつくる。OracleDatabase\SingleInstance\samples\1830-docker-composeにサンプルがあるので、それを基につくる。

ホスト側にOracleのデータを保存

コンテナを作成すると毎回Oracleの色んなデータを作り直すので、起動に時間がかかる。あと、テーブル作ったりしても消えてしまうので、その場合はホスト側に保存する必要がある。

まず、Docker for WindwosのSettingsで共有ディレクトリを作りたいドライブにチェックを入れておく必要がある。

f:id:kagamihoge:20181228204006j:plain

volumesでホスト側の適当なディレクトリに/opt/oracle/oradataを保存するように設定する。ついでに、環境変数ORACLE_PWD=oracleでパスワードを固定している。環境変数は他にもORACLE_SIDとかORACLE_PDBとかがある。

version: '3'
services:
  database:
    image: oracle/database:18.4.0-xe
    volumes:
      - C:\mydata\oracle\oradata:/opt/oracle/oradata
    ports:
      - 11521:1521
      - 18080:8080
      - 15500:5500
    environment:
      - ORACLE_PWD=oracle