Oracleが提供しているDockerfileを使って、Oracle 18c XEが動作するDockerイメージを作成する方法
Dockerイメージの作成が完了している場合は、コンテナの作成に進みます。
動作環境の準備
Oracleが提供しているDockerfileから、dockerイメージを作成する場合、以下の条件があります。
- ディスクの空きが13GB以上
- メモリが1GB以上
Vagrant・CentOS 7
Vagrantの公式CentOS 7を使う場合、以下でboxを追加します。
vagrant box add centos/7CentOS 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