環境
- Docker for Windows Version 2.0.0.0-win81 (29211) https://docs.docker.com/docker-for-windows/
- Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production - https://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html
- SQL Developer 18.3.0.277 - https://www.oracle.com/technetwork/jp/developer-tools/sql-developer/downloads/index.html
手順
Docker for Windows準備
https://docs.docker.com/docker-for-windows/からダウンロードしてインストール。
イメージのビルド
https://github.com/oracle/docker-images.git にOracle関連の各種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。

docker-compose.yml
docker-compose.ymlをつくる。OracleDatabase\SingleInstance\samples\1830-docker-composeにサンプルがあるので、それを基につくる。
ホスト側にOracleのデータを保存
コンテナを作成すると毎回Oracleの色んなデータを作り直すので、起動に時間がかかる。あと、テーブル作ったりしても消えてしまうので、その場合はホスト側に保存する必要がある。
まず、Docker for WindwosのSettingsで共有ディレクトリを作りたいドライブにチェックを入れておく必要がある。

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