Oracleが提供しているDockerfileを使って、Oracle 18c XEが動作するDockerイメージを作成する方法

Dockerイメージの作成が完了している場合は、コンテナの作成に進みます。

動作環境の準備

Oracleが提供しているDockerfileから、dockerイメージを作成する場合、以下の条件があります。

  • ディスクの空きが13GB以上
  • メモリが1GB以上

Vagrant・CentOS 7

Vagrantの公式CentOS 7を使う場合、以下でboxを追加します。

vagrant box add centos/7
CentOS 7のboxが追加できたら以下で初期化し、Vagrantfileを作成します。
vagrant init centos/7

これをOracle用dockerに使用する場合、以下の問題があります。

  • ディスク容量不足(13GB以上必要)
  • メモリ不足(1GB以上必要)

メモリの変更は、Vagrantfileの設定で変更可能ですが、 ディスク容量の変更は、Vagrantfileの設定で行う場合、vagrant-disksizeプラグインが必要になります。 そのため、以下のコマンドを実行してvagrant-disksizeプラグインをインストールします。

vagrant plugin install vagrant-disksize

プラグインをインストールしたら、Vagrantfilを以下のように修正して、ディスクス容量とメモリの不足を解消させます。 以下の例では、大きいデータを扱わないので、ディスクを30GB、メモリを1.5GBにしています。

Vagrant.configure("2") do |config|
  ...
  ...
  config.disksize.size = '30GB'    #ディスク容量指定
 
  config.vm.provider "virtualbox" do |vb|
      vb.memory = "1536"   # メモリ指定
  end
end

vagrant-disksizeプラグインのインストールと、Vagrantfileの修正が終わったら、起動します。 起動後、メモリやディスク容量が指定値になっていることを確認します。

vagrant up

イメージ作成

Oracleが動作するDockerイメージは、Dockerfileを公開しているDockerfileを使います。 動作環境は、Vagrantの更新CentOS 7となります。

Oracle Dockerfile

Oracleがgithubに公開しているDockerファイルを取得します。 レポジトリは以下になります。

ローカルに取得します。

git clone https://github.com/oracle/docker-images.git

取得したら以下の18c XEのDockerファイルを確認します。

OracleDatabase\SingleInstance\dockerfiles\18.4.0\Dockerfile.xe

Dockerfile.xeの以下の作業手順に沿って作業します。

# REQUIRED FILES TO BUILD THIS IMAGE
# ----------------------------------
# (1) oracle-database-xe-18c-1.0-1.x86_64.rpm
#     Download Oracle Database Express Edition (XE) Release 18.4.0.0.0 (18c) for Linux x64
#     from https://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html
#
# HOW TO BUILD THIS IMAGE
# -----------------------
# Put the downloaded file in the same directory as this Dockerfile
# Run: 
#      $ docker build -t oracle/database:18.4.0-xe -f Dockerfile.xe .

Oracle 18c XE

最初に以下よりLinux用Oracleのrpmファイルを取得します。

注意 ダウンロードには、オラクルアカウントが必要になります。 無い場合はアカウントを作成します。

Oracle 18c XEは、以下のファイルになります。 このファイルをダウンロードできたらDockerfile.exと同じディレクトリに置きます。

oracle-database-xe-18c-1.0-1.x86_64.rpm

イメージのビルド

Dockerfile.xeに書かれている通りに、以下のコマンドを実行します。

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

実行すると以下のようになります。

docker build -t oracle/database:18.4.0-xe -f Dockerfile.xe .
Sending build context to Docker daemon  2.574GB
Step 1/10 : FROM oraclelinux:7-slim
7-slim: Pulling from library/oraclelinux
a316717fc6ee: Pull complete                                                                                                                       Digest: sha256:c5f3baff726ffd97c7e9574e803ad0e8a1e5c7de236325eed9e87f853a746e90
Status: Downloaded newer image for oraclelinux:7-slim
 ---> 874477adb545
Step 2/10 : MAINTAINER Gerald Venzl <gerald.venzl@oracle.com>
 ---> Running in 02cc223f306a
Removing intermediate container 02cc223f306a
 ---> e53f1c25001b
Step 3/10 : ENV ORACLE_BASE=/opt/oracle     ORACLE_HOME=/opt/oracle/product/18c/dbhomeXE     ORACLE_SID=XE     INSTALL_FILE_1="oracle-database-xe-18c-1.0-1.x86_64.rpm"     RUN_FILE="runOracle.sh"     PWD_FILE="setPassword.sh"     CONF_FILE="oracle-xe-18c.conf"     CHECK_SPACE_FILE="checkSpace.sh"     CHECK_DB_FILE="checkDBStatus.sh"     INSTALL_DIR="$HOME/install"     ORACLE_DOCKER_INSTALL="true"
...
...
STotal size: 5.2 G
Total download size: 56 k
Installed size: 5.2 G
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : file-5.11-35.el7.x86_64                                      1/2
  Installing : oracle-database-xe-18c-1.0-1.x86_64                          2/2
[INFO] Executing post installation scripts...
[INFO] Oracle home installed successfully and ready to be configured.
To configure Oracle Database XE, optionally modify the parameters in '/etc/sysconfig/oracle-xe-18c.conf' and then execute '/etc/init.d/oracle-xe-18c configure' as root.
  Verifying  : oracle-database-xe-18c-1.0-1.x86_64                          1/2
  Verifying  : file-5.11-35.el7.x86_64                                      2/2

Installed:
  oracle-database-xe-18c.x86_64 0:1.0-1

Dependency Installed:
  file.x86_64 0:5.11-35.el7

Complete!
Removing intermediate container 325ff9ebbb4f
 ---> a1cf9c1b893d
Step 7/10 : VOLUME ["$ORACLE_BASE/oradata"]
 ---> Running in 31dc4f6a56ca
Removing intermediate container 31dc4f6a56ca
 ---> c89550754a31
Step 8/10 : EXPOSE 1521 8080 5500
 ---> Running in e84fd591505c
Removing intermediate container e84fd591505c
 ---> 05cbeacb2f3a
Step 9/10 : HEALTHCHECK --interval=1m --start-period=5m    CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1
 ---> Running in c2b10d2b48aa
Removing intermediate container c2b10d2b48aa
 ---> 829321c5b247
Step 10/10 : CMD exec $ORACLE_BASE/$RUN_FILE
 ---> Running in b0bcd6372244
Removing intermediate container b0bcd6372244
 ---> e4b50538b64a
Successfully built e4b50538b64a
Successfully tagged oracle/database:18.4.0-xe

作成されたイメージを確認すると以下のようになっていました。

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
oracle/database     18.4.0-xe           e4b50538b64a        16 minutes ago      8.57GB
oraclelinux         7-slim              874477adb545        2 months ago        118MB

イメージ作成前後のディスク容量

Oracle用Dockerイメージの作成では、空きディスク容量に13GB以上必要ですが、イメージ作成では約8~9GBぐらい増加しました。

イメージ作成前

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        40G  8.1G   32G  21% /
devtmpfs        740M     0  740M   0% /dev
tmpfs           748M     0  748M   0% /dev/shm
tmpfs           748M  8.5M  740M   2% /run
tmpfs           748M     0  748M   0% /sys/fs/cgroup
tmpfs           150M     0  150M   0% /run/user/1000

イメージ作成後

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        40G   17G   24G  41% /
devtmpfs        740M     0  740M   0% /dev
tmpfs           748M     0  748M   0% /dev/shm
tmpfs           748M  8.6M  740M   2% /run
tmpfs           748M     0  748M   0% /sys/fs/cgroup
tmpfs           150M     0  150M   0% /run/user/1000
tmpfs           150M     0  150M   0% /run/user/0

Dockerコンテナの起動

Dockerイメージが作成できたらコンテナの作成をします。 詳細は以下のページ。

トラブル

ディスク容量不足

Oracle用Dockerイメージの作成では、空きディスク容量が13GB未満なら、以下のよなエラーが表示されてエラーになります。 そのため、ディスク容量の空きは13GB以上用意します。

# docker build -t oracle/database:18.4.0-xe -f Dockerfile.xe .
Sending build context to Docker daemon  2.574GB
Step 1/10 : FROM oraclelinux:7-slim
7-slim: Pulling from library/oraclelinux
a316717fc6ee: Pull complete 
 ...
 ...
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
checkSpace.sh: ERROR - There is not enough space available in the docker container.
checkSpace.sh: The container needs at least 13 GB, but only 8 GB are available.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
...
chmod ug+x $ORACLE_BASE/*.sh' returned a non-zero code: 1

Vagrantの場合、プラグインのvagrant-disksizeでディスク容量を拡張できます。 インストールは以下のコマンドを実行します。

vagrant plugin install vagrant-disksize
実行すると以下のようになります。
vagrant plugin install vagrant-disksize
Installing the 'vagrant-disksize' plugin. This can take a few minutes...
Fetching: vagrant-disksize-0.1.3.gem (100%)
Installed the plugin 'vagrant-disksize (0.1.3)'!

Vagrantfileに config.disksize.size を以下のように追加します。

Vagrant.configure(2) do |config|

  config.disksize.size = '30GB'  # Expand Disk space
  ...
end

メモリ不足

18c XEでは、メモリが1GB以上必要です。1GB未満の場合、以下のようなエラーになります。

# docker build -t oracle/database:18.4.0-xe -f Dockerfile.xe .
Sending build context to Docker daemon  2.574GB
...
Transaction test succeeded
Running transaction
  Installing : file-5.11-35.el7.x86_64                                      1/2
[SEVERE] Oracle Database 18c Express Edition requires a minimum of 1GB of physical
memory (RAM).  This system has 487 MB of RAM and does not meet minimum
requirements.

error: %pre(oracle-database-xe-18c-1.0-1.x86_64) scriptlet failed, exit status 1
Error in PREIN scriptlet in rpm package oracle-database-xe-18c-1.0-1.x86_64
  Verifying  : file-5.11-35.el7.x86_64                                      1/2
  Verifying  : oracle-database-xe-18c-1.0-1.x86_64                          2/2

Dependency Installed:
  file.x86_64 0:5.11-35.el7

Failed:
  oracle-database-xe-18c.x86_64 0:1.0-1
...
chmod ug+x $ORACLE_BASE/*.sh' returned
 a non-zero code: 1

vagrantの公式centos/7から作成したので、メモリが487MBになっています。

 free -h
              total        used        free      shared  buff/cache   available
Mem:           487M        112M        8.7M        1.0M        365M        333M
Swap:          2.0G         34M        2.0G

Vagrantfileでメモリを1GB以上に変更するため、以下のように修正します。 この例では、メモリを1.5GBに設定しています。

Vagrant.configure("2") do |config|
  ...
  ...
  config.vm.provider "virtualbox" do |vb|
      vb.memory = "1536"
  end
end