Docker上でOracle 11g XE

はじめに

 「Docker上でOracleは動くんだろうか?」という疑問がありまして、調べてみたのでメモ。
 やってみたところ、とりあえず動かすだけならば、あっさり動きます。

環境

Oracleのインストール方法

 タイトルは「Oracleのインストール方法」としましたが、Dockerfileが存在しますので、それを使ってしまいましょう。
 ちょっと探してみたところ、以下のDockerfileがありました。

  • …上記のDokcerfileにいくつか設定を足したもの。

起動

 以下のような感じであっさり起動します。

core@core01 /usr/share/oem $ docker pull alexeiled/docker-oracle-xe-11g
core@core01 /usr/share/oem $ docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
alexeiled/docker-oracle-xe-11g   latest              ba16d5d5e1aa        10 months ago       2.388 GB
core@core01 /usr/share/oem $ docker run --name oracle -p 49160:22 -p 49161:1521 -p 49162:8080 alexeiled/docker-oracle-xe-11g
Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.

ためしに表領域の拡張をしてみる。

 これもまたあっさりとできます。

root@3a2cf2522db9:/# sqlplus sys/oracle as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Mon Jan 12 10:41:07 2015

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


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL> select tablespace_name, file_name, status, bytes/1024/1024 mbytes, increment_by, autoextensible, online_status from dba_data_files;

TABLESPACE FILE_NAME                                STATUS         MBYTES INCREMENT_BY AUTOE ONLINE
---------- ---------------------------------------- ---------- ---------- ------------ ----- ------
USERS      /u01/app/oracle/oradata/XE/users.dbf     AVAILABLE         100         1280 YES   ONLINE
SYSAUX     /u01/app/oracle/oradata/XE/sysaux.dbf    AVAILABLE         640         1280 YES   ONLINE
UNDOTBS1   /u01/app/oracle/oradata/XE/undotbs1.dbf  AVAILABLE          25          640 YES   ONLINE
SYSTEM     /u01/app/oracle/oradata/XE/system.dbf    AVAILABLE         360         1280 YES   SYSTEM
SQL> alter database datafile '/u01/app/oracle/oradata/XE/users.dbf' resize 10G;

Database altered.

さいごに

 起動までは簡単だったのですが、以下が少々謎として残りました。

  • Oracleのインストール時には、カーネルのパラメータを少々調整するものですが、Dockerコンテナはホストとカーネルを共用しているわけで、どうすればいいのだろう。
  • データの永続化が面倒そう……。コンテナ内から、ホストにファイルを順にコピーしていけば、永続化はできそうなのですが、どのファイルをコピーしたらいいのかとか、そんな方法でいいのかとか、悩ましい……。