[Oracle Database] 公式Docker Imageを利用してOracle Database 19cのRAC環境を構築してみた

本記事の目的

本ブログの人気記事の一つに「[Oracle Database] 公式Docker Imageを利用してOracle Database 19c環境を構築してみた」があるのですが、年末年始休暇に入る直前にOracle Real Application Clusters(RAC)環境用のDocker Imageが公開されているのを知ったので、これは冬休みの課題として取り組むしかない!というわけで実際に構築手順を確認してみました。

 

参考手順

構築にあたり参考にしたのは、以下のホワイトペーパーおよび、そこからリンクされている公式Docker ImageサイトのREADMEです。

Best Practices for Deploying Oracle RAC on Docker

Oracle RAC Database on Docker

基本的には後者のREADME(本記事ではこれ以降「公式ガイド」と呼ぶ)にある手順に沿って構築可能ですが、前提としてホワイトペーパーも眺めておくとよいと思います。

 

この記事では実際に構築した際の手順の概要を紹介します。

ただし、試行錯誤しながら構築した際のメモを整理したものなので、手順の流れを把握する程度に利用するのをお奨めします。この手順で無事に構築できた or うまく出来なかったなど、こっそりフィードバック頂けると嬉しいです。

※必要に応じて追記更新予定

 

注意事項

なお、お約束事ですが、本記事に掲載している内容を実践したことにより、如何なる損害が発生しても責任は負いかねます。ご了承の上で参照ください。

また、前述の公式ガイドにも記載の通り、本番環境での利用はサポートされていないので注意してください。

IMPORTANT: Note that the current version of Oracle RAC on Docker is only supported for test and development environments, but not for production environments.

 

 

検証環境

Oracle Database 19c on Oracle Linux7.9

・構築方針

前述のホワイトペーパーおよびDocker Imageにあるガイドでは複数パターンでの構築手順が記載されているのですが(それが混乱を誘いがち…)、今回は以下のような構成で作成することにしました。

ホストOSは1台のみ利用し、この中にracnode1,racnode2という2つのコンテナを作成。

共有ディスク領域にはブロックデバイスを利用。
(他にNFSを利用する方法や、RAC Storage Containerを利用する方法も記載あり)

 

・検証環境およびスペック

以下の環境で構築しました。

  • Oracle Cloud Infrastructure Compute
    • シェイプ:VM.Standard.E3.Flex 2 CPU, 32GB
    • ブートボリューム:46.6 GB(デフォルト)
    • ブロックボリューム:50GB(RACデータ領域用)
  • Oracle Linux 7.9
  • Oracle Database 19c (19.3)
  • Oracle Database 19c Grid Infrastructure(19.3)
  • Docker

 

今回はOracle Cloudの仮想マシンを利用しましたが、dockerを利用可能であれば環境はローカルPCでも他社クラウドでも何でも良いはず。

ちなみに、上記のスペックだとOracle RACのインストール要件を満たしていませんが、構築だけであれば大丈夫でした。

 

 

Section 1 : Prerequsites for RAC on Docker

ここからは公式ガイドのタイトルにあわせて、ポイントとなる手順を記載していく。公式ガイドもあわせて参照のこと。

本セクションはホストOS上の環境設定。ここで漏れがあると、コンテナの作成や起動時にエラーとなりがち(経験済み)。

 

dockerインストール

[root@vmrac ~]# yum install -y docker-engine
[root@vmrac ~]# systemctl start docker
[root@vmrac ~]# systemctl enable docker

 

ユーザopcをdockerグループへ追加

[root@vmrac ~]# usermod -aG docker opc

 

カーネルパラメータ変更

[root@vmrac ~]# vi /etc/sysctl.conf
以下を追加
fs.file-max = 6815744
net.core.rmem_max = 4194304
net.core.rmem_default = 262144
net.core.wmem_max = 1048576
net.core.wmem_default = 262144
net.core.rmem_default = 262144

設定値確認と反映
[root@vmrac ~]# sysctl -a
[root@vmrac ~]# sysctl -p

 

docker用ネットワーク作成

パブリック用とプライベート用をそれぞれ用意。サブネットは公式ガイドの値をそのまま利用。

[root@vmrac ~]# docker network create --driver=bridge --subnet=172.16.1.0/24 rac_pub1_nw
[root@vmrac ~]# docker network create --driver=bridge --subnet=192.168.17.0/24 rac_priv1_nw
[root@vmrac ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
68daca2e085c bridge bridge local
c1ba84c821dd host host local
afbc82426cdb none null local
5c1c5480bad6 rac_priv1_nw bridge local
97a8d8984474 rac_pub1_nw bridge local

 

dockerオプション変更

公式ガイドだと以下のような手順が記載されている。

update the OPTIONS value in /etc/sysconfig/docker to following:
OPTIONS=’–selinux-enabled –cpu-rt-runtime=950000′

が、自分の環境では指定のファイルが存在せず有効にならなかったので、以下の手順で反映。

[root@vmrac ~] vi /usr/lib/systemd/system/docker.service
[root@vmrac ~] grep ExecStart /usr/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --selinux-enabled --cpu-rt-runtime=950000

[root@vmrac ~] systemctl daemon-reload
[root@vmrac ~] systemctl restart docker
[root@vmrac ~] systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-12-30 08:51:59 GMT; 5s ago
Docs: https://docs.docker.com
Main PID: 18032 (dockerd)
Tasks: 10
Memory: 46.1M
CGroup: /system.slice/docker.service
└─18032 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --selinux-enabled --cpu-rt...

/usr/lib/systemd/system/docker.service

[root@vmrac ~]$ ps -ef | grep docker
root 18032 1 0 08:51 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --selinux-enabled --cpu-rt-runtime=950000

⇒起動オプションに反映されていることを確認。

 

SELINUX設定変更

公式ガイドに従いPermissiveモードに変更。

[root@vmrac ~] vi /etc/selinux/config

#SELINUX=enforcing ★変更前
SELINUX=permissive ★変更

[root@vmrac ~] shutdown -r now

再起動後に設定値確認。
[opc@vmrac ~]$ getenforce
Permissive

 

docker-imagesのダウンロード

今回はopcユーザのホームディレクトリを利用。

[opc@vmrac ~]$ sudo yum install -y git
[opc@vmrac ~]$ git clone https://github.com/oracle/docker-images.git

 

Oracle Databaseバイナリのダウンロード

docker-imagesにはOracle Databaseのバイナリは含まれていないので、OTNから以下のファイルを入手する。
Oracle Database 19c Grid Infrastructure (19.3) for Linux x86-64
Oracle Database 19c (19.3) for Linux x86-64

※利用にあたっては、ライセンス許諾ルールを確認のこと。

 

dockerf-imagesフォルダに配置

winscpなどでdocker-images配下の指定のフォルダに配置する。

[opc@vmrac 19.3.0]$ pwd
/home/opc/docker-images/OracleDatabase/RAC/OracleRealApplicationClusters/dockerfiles/19.3.0
[opc@vmrac 19.3.0]$ ls
AddNode.sh db_sw_install_19c.rsp gridsetup_19cv1.rsp runUserScripts.sh
applyGridPatch.sh DelNode.sh grid_sw_install_19c.rsp sample_19c.ccf
checkDBStatus.sh Dockerfile installDBBinaries.sh setCrontab.sh
checkSpace.sh Dockerfile_orig installGridBinaries.sh setPassword.sh
Checksum enableRAC.sh LINUX.X64_193000_db_home.zip setupDB.sh
configGrid.sh fixupPreq.sh LINUX.X64_193000_grid_home.zip setupGridEnv.sh
dbca_19c.rsp functions.sh MultiNodeInstall.py setupGrid.sh
dbca_19cv1.rsp grid1.rsp MultiRACInstall.sh setupLinuxEnv.sh
dbca1.rsp grid_addnode.rsp OracleHomeCleanup.sh setupSSH.expect
dbca.rsp GridHomeCleanup.sh remoteListener.sh sshUserSetup.sh
db_install_19cv1.rsp grid.rsp resetOSPassword.sh stopOracle.sh
db_inst.rsp gridsetup_19c.rsp runOracle.sh tempfile
[opc@vmrac 19.3.0]$ ls -l *.zip
-rw-rw-r--. 1 opc opc 3059705302 Dec 30 07:23 LINUX.X64_193000_db_home.zip ★ここに配置
-rw-rw-r--. 1 opc opc 2889184573 Dec 30 07:23 LINUX.X64_193000_grid_home.zip ★ここに配置

 

Section 2: Building Oracle RAC Database Docker Install Images

Oracle Database 19c RAC用のdockerイメージを作成

[opc@vmrac ~]$ cd /home/opc/docker-images/OracleDatabase/RAC/OracleRealApplicationClusters/dockerfiles/
[opc@vmrac dockerfiles]$ ls
12.2.0.1 18.3.0 19.3.0 buildDockerImage.sh
[opc@vmrac dockerfiles]$ time ./buildDockerImage.sh -v 19.3.0

⇒10分程度で作成完了。

・docker イメージ作成確認

[opc@vmrac dockerfiles]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
oracle/database-rac 19.3.0 3a5cf5173651 About a minute ago 20.5GB
oraclelinux 7-slim 0df4834a761b 7 days ago 132MB

 

 

Section 3: Creating the Docker GI and RAC Container

このセクションが特に分かりづらいが、シングルホストでのブロックデバイス利用の場合は以下に記載のコマンド群のみでよいはず。

Create the shared host file

[opc@vmrac]$ sudo mkdir /opt/containers
[opc@vmrac]$ sudo touch /opt/containers/rac_host_file
[opc@vmrac]$ ls -l /opt/containers/rac_host_file
-rw-r--r--. 1 root root 0 Dec 30 08:22 /opt/containers/rac_host_file

 

Password management

[opc@vmrac dockerfiles]$ sudo vi /opt/.secrets/common_os_pwdfile
★任意のパスワード文字列を指定(これがsysユーザのパスワードとなる)

[opc@vmrac dockerfiles]$ sudo mkdir /opt/.secrets/
[opc@vmrac dockerfiles]$ sudo openssl rand -hex 64 -out /opt/.secrets/pwd.key
[opc@vmrac dockerfiles]$ sudo openssl enc -aes-256-cbc -salt -in /opt/.secrets/common_os_pwdfile -out /opt/.secrets/common_os_pwdfile.enc -pass file:/opt/.secrets/pwd.key
[opc@vmrac dockerfiles]$ ls -l /opt/.secrets/pwd.key
-rw-r--r--. 1 root root 129 Dec 30 08:23 /opt/.secrets/pwd.key

 

Deploying RAC on Docker With Block Devices

・デバイス初期化

公式ガイドだと/dev/xvdeとなってるが、自分の環境にあわせて対象デバイスを初期化。

[root@vmrac ~] dd if=/dev/zero of=/dev/sdb bs=8k count=100000

 

・ノード1用コンテナ作成

公式ガイドにあるコマンドを参考にノード1(racnode1)用のコンテナを作成。

以下は自分の環境に合わせて編集したもの。
「device」、「 ASM_DEVICE_LIST」の書き換えと、「CMAN_HOSTNAME」、「CMAN_IP」のエントリ削除。

[opc@vmrac ]$ docker create -t -i \
  --hostname racnode1 \
  --volume /boot:/boot:ro \
  --volume /dev/shm \
  --tmpfs /dev/shm:rw,exec,size=4G \
  --volume /opt/containers/rac_host_file:/etc/hosts  \
  --volume /opt/.secrets:/run/secrets \
  --dns-search=example.com \
  --device=/dev/sdb:/dev/asm_disk1  \
  --privileged=false  \
  --cap-add=SYS_NICE \
  --cap-add=SYS_RESOURCE \
  --cap-add=NET_ADMIN \
  -e NODE_VIP=172.16.1.160 \
  -e VIP_HOSTNAME=racnode1-vip  \
  -e PRIV_IP=192.168.17.150 \
  -e PRIV_HOSTNAME=racnode1-priv \
  -e PUBLIC_IP=172.16.1.150 \
  -e PUBLIC_HOSTNAME=racnode1  \
  -e SCAN_NAME=racnode-scan \
  -e SCAN_IP=172.16.1.70  \
  -e OP_TYPE=INSTALL \
  -e DOMAIN=example.com \
  -e ASM_DEVICE_LIST=/dev/asm_disk1 \
  -e ASM_DISCOVERY_DIR=/dev \
  -e COMMON_OS_PWD_FILE=common_os_pwdfile.enc \
  -e PWD_KEY=pwd.key \
  --restart=always --tmpfs=/run -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
  --cpu-rt-runtime=95000 --ulimit rtprio=99  \
  --name racnode1 \
  oracle/database-rac:19.3.0

 

・作成確認

[opc@vmrac]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c815ff1b3530 oracle/database-rac:19.3.0 "/usr/sbin/oracleinit" About a minute ago Created racnode1

 

Assign networks to RAC containers

[opc@vmrac]$ docker network disconnect bridge racnode1
[opc@vmrac]$ docker network connect rac_pub1_nw --ip 172.16.1.150 racnode1
[opc@vmrac]$ docker network connect rac_priv1_nw --ip 192.168.17.150 racnode1

 

Start the first container

[opc@vmrac]$ docker start racnode1

 

・起動ログ確認

[opc@vmrac dockerfiles]$ docker logs -f racnode1

コンテナ作成は20分程度かかる。最終的に以下のようなメッセージが表示されれば成功。

####################################
ORACLE RAC DATABASE IS READY TO USE!
####################################

※途中でエラーとなった場合、エラーメッセージを参考に原因調査。

 

Connect to the RAC container

[opc@vmrac ~]$ docker exec -it racnode1 bash
[grid@racnode1 ~]$

⇒racnode1へログインできればOK

 

・プロセスチェック

[grid@racnode1 ~]$ ps -ef | grep pmon
grid 12829 12699 0 13:04 pts/1 00:00:00 grep --color=auto pmon
grid 17827 1 0 11:57 ? 00:00:00 asm_pmon_+ASM1
oracle 21805 1 0 12:18 ? 00:00:00 ora_pmon_ORCLCDB1
[grid@racnode1 ~]$ crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online

 

・DBログイン確認

[oracle@racnode1 ~]$ export ORACLE_HOME=$DB_HOME
[oracle@racnode1 ~]$ cd $ORACLE_HOME/network/admin
[oracle@racnode1 admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORCLCDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = racnode-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCLCDB)
    )
  )

[oracle@racnode1 admin]$ sqlplus sys@ORCLCDB as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Dec 30 13:08:38 2020
Version 19.3.0.0.0

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

Enter password:

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

⇒この時点で既にノード1ではDBログイン出来る状態!

 

 

Section 4: Adding a RAC Node using a Docker container

Password management

同一ホスト上なので、この手順はスキップで良いはず。

 

Deploying with Block Devices

・ノード2用コンテナ作成

ノード1の時と同様手順で、ノード2用のコンテナを作っていく。

[opc@vmrac]$ docker create -t -i \
--hostname racnode2 \
--volume /dev/shm \
--tmpfs /dev/shm:rw,exec,size=4G \
--volume /boot:/boot:ro \
--dns-search=example.com \
--volume /opt/containers/rac_host_file:/etc/hosts \
--volume /opt/.secrets:/run/secrets \
--device=/dev/sdb:/dev/asm_disk1 \
--privileged=false \
--cap-add=SYS_NICE \
--cap-add=SYS_RESOURCE \
--cap-add=NET_ADMIN \
-e EXISTING_CLS_NODES=racnode1 \
-e NODE_VIP=172.16.1.161 \
-e VIP_HOSTNAME=racnode2-vip \
-e PRIV_IP=192.168.17.151 \
-e PRIV_HOSTNAME=racnode2-priv \
-e PUBLIC_IP=172.16.1.151 \
-e PUBLIC_HOSTNAME=racnode2 \
-e DOMAIN=example.com \
-e SCAN_NAME=racnode-scan \
-e SCAN_IP=172.16.1.70 \
-e ASM_DISCOVERY_DIR=/dev \
-e ASM_DEVICE_LIST=/dev/asm_disk1 \
-e ORACLE_SID=ORCLCDB \
-e OP_TYPE=ADDNODE \
-e COMMON_OS_PWD_FILE=common_os_pwdfile.enc \
-e PWD_KEY=pwd.key \
--tmpfs=/run -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--cpu-rt-runtime=95000 \
--ulimit rtprio=99 \
--restart=always \
--name racnode2 \
oracle/database-rac:19.3.0

 

Assign Network to additional RAC container

[opc@vmrac ~]$ docker network disconnect bridge racnode2
[opc@vmrac ~]$ docker network connect rac_pub1_nw --ip 172.16.1.151 racnode2
[opc@vmrac ~]$ docker network connect rac_priv1_nw --ip 192.168.17.151 racnode2

 

Start RAC container

[opc@vmrac ~]$ docker start racnode2
racnode2

・別端末からログ確認

[opc@vmrac ~]$ docker logs -f racnode2

こちらも20分程度かかった。最終的に以下のようなメッセージが表示されれば成功。

####################################
ORACLE RAC DATABASE IS READY TO USE!
####################################

※途中でエラーとなった場合、エラーメッセージを参考に原因調査。

 

Connect to the RAC container

[opc@vmrac ~]$ docker exec -i -t racnode2 /bin/bash

[grid@racnode2 ~]$ ps -ef | grep pmon
grid 13908 1 0 13:20 ? 00:00:00 asm_pmon_+ASM2
oracle 17185 1 0 13:22 ? 00:00:00 ora_pmon_ORCLCDB2
grid 18662 18403 0 13:25 pts/1 00:00:00 grep --color=auto pmon

[grid@racnode2 ~]$ crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online

[grid@racnode2 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
               ONLINE  ONLINE       racnode1                 STABLE
               ONLINE  ONLINE       racnode2                 STABLE
ora.chad
               ONLINE  ONLINE       racnode1                 STABLE
               ONLINE  ONLINE       racnode2                 STABLE
ora.net1.network
               ONLINE  ONLINE       racnode1                 STABLE
               ONLINE  ONLINE       racnode2                 STABLE
ora.ons
               ONLINE  ONLINE       racnode1                 STABLE
               ONLINE  ONLINE       racnode2                 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
      1        ONLINE  ONLINE       racnode1                 STABLE
      2        ONLINE  ONLINE       racnode2                 STABLE
      3        ONLINE  OFFLINE                               STABLE
ora.DATA.dg(ora.asmgroup)
      1        ONLINE  ONLINE       racnode1                 STABLE
      2        ONLINE  ONLINE       racnode2                 STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       racnode1                 STABLE
ora.asm(ora.asmgroup)
      1        ONLINE  ONLINE       racnode1                 Started,STABLE
      2        ONLINE  ONLINE       racnode2                 Started,STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.asmnet1.asmnetwork(ora.asmgroup)
      1        ONLINE  ONLINE       racnode1                 STABLE
      2        ONLINE  ONLINE       racnode2                 STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.cvu
      1        ONLINE  ONLINE       racnode1                 STABLE
ora.orclcdb.db
      1        ONLINE  ONLINE       racnode1                 Open,HOME=/u01/app/o
                                                             racle/product/19.3.0
                                                             /dbhome_1,STABLE
      2        ONLINE  ONLINE       racnode2                 Open,HOME=/u01/app/o
                                                             racle/product/19.3.0
                                                             /dbhome_1,STABLE
ora.qosmserver
      1        ONLINE  ONLINE       racnode1                 STABLE
ora.racnode1.vip
      1        ONLINE  ONLINE       racnode1                 STABLE
ora.racnode2.vip
      1        ONLINE  ONLINE       racnode2                 STABLE
ora.scan1.vip
      1        ONLINE  ONLINE       racnode1                 STABLE
--------------------------------------------------------------------------------

 

Section 5: Connecting to RAC Database

・DBログイン確認

[oracle@racnode2 ~]$ export ORACLE_HOME=$DB_HOME
[oracle@racnode2 admin]$ sqlplus sys@ORCLCDB as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Dec 30 13:28:17 2020
Version 19.3.0.0.0

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

Enter password:

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

⇒racnode2からもsqlplusログイン成功!

 

 

おまけ

公式ガイドに従って順調にいけば、シングルホスト上でのRAC環境が手に入るはず。

ちなみに、ホストOSを再起動すると勝手にコンテナ(racnode1,racnode2)は起動する設定となっている模様。

dockerの仕組みがまだまだ理解できていないのと、本当はRAC Storage Containerを利用した方法で構築したかったので(最初に試したが、うまくいかず一旦断念)、今後色々と調べつつ補足記事を書く予定。

 

おまけ1:[Docker] Oracle Database RAC 構築で学ぶDocker入門

 

参考情報

※既に紹介したものも含みます。

Best Practices for Deploying Oracle RAC on Docker

Oracle RAC Database on Docker

・Grid Infrastructureインストレーションおよびアップグレード・ガイドfor Linux
Oracle Grid Infrastructureのサーバー・ハードウェアのチェックリスト

 

RAC on Docker – Single Host Setup

如何获得一个RAC Oracle数据库(从Github – oracle/docker-images) – 公有云版
⇒参考にさせてもらった検証記事。

 

変更履歴

・2021/01/05
Section 3 の Password management の記載内容変更(記載漏れコマンド追記)
Section 3 の Connect to the RAC container の記載内容変更(設定確認コマンド追記)
おまけ1記事追加

・2021/01/07
注意事項セクション追記、検証環境のスペック表現修正

 

スポンサードリンク

2 Comments

  1. こちらの記事を見て早速構築してみました!
    一部私が追加したコマンドがあるので記載しますー。

    Section 3 の「Password management」の前に以下を実施。

    mkdir /opt/.secrets/
    openssl rand -hex 64 -out /opt/.secrets/pwd.key

    また、DBログイン確認の際にORACLE_SIDの指定も記載してあげた方がいいかもしれないっすね。

2 Trackbacks / Pingbacks

  1. [Oracle Database] 公式Docker Imageを利用してOracle Database 19c環境を構築してみた | | IT Edge Blog
  2. [Docker] Oracle Database RAC 構築で学ぶDocker入門 | | IT Edge Blog

Leave a Reply

Your email address will not be published.


*