今回のプロジェクトはソフトウェアを直接パソコンにインストールするので、なんだかんだで開発環境の構築に1日以上かかりました。リリースは来年なので、ここから結合テスト以降のテストを行うそうです。
今回はDocker化しておけば楽だよねと余計なお世話をした結果、詰んだお話です。
本番環境ではWindows Serverを利用するのでソフトウェアは以下の通りです。
・Windows Server
・Oracle Database
・Java
・tomcat
Dockerで以下のような構成のOracle DatabaseとWindows Serverのコンテナを用意することにします。
Delivery
|- Delivery_db ・・・ データベース用コンテナ(Oracle19c)
|- Delivery_web ・・・ WEBサーバー用コンテナ(WindowsServer、tomcat、java、webアプリ)
Oracle Databaseコンテナの作成
まずはOracleのコンテナを作ってみます。ググるとgithubでイメージを作成するプログラムが公開されていましたので、今回はそちらを利用させてもらいます。以下のリポジトリからイメージを作成するプログラムをクローンします。
git clone https://github.com/oracle/docker-images.git
クローンした中身をみるとOracle製品に関する様々なイメージを作成できるようで、その中でDatabaseのイメージを作成する以下のディレクトリを利用します。
docker-images/OracleDatabase/SingleInstance/dockerfiles
とここでイメージ作成にはOracle Databaseのインストールファイルが必要になりますので、先にOracleのサイトからインストールファイルをダウンロードします。
今回はバージョン19cを使います。イメージ作成プログラムはOracle Linux8で動くイメージを作成するのでLinux版を選択。使用する自機がM1 Macbookなのでaarch64用のzip形式をダウンロードします。
ダウンロードしたインストールファイルは先程のディレクト下のバージョンごとのディレクトリに格納します。ダウンロードしたインストールファイルのバージョンは19.19.0なので該当のディレクトリはありませんがメジャーバージョンがあっていればいいようなので以下の19.3.0に格納します。
docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0
格納したら以下のコマンドでイメージを作成します。イメージの作成には数分かかりますのでゆっくり待つます。またコマンドの引数の詳しい説明は1階層上のSingleInstanceにあるREADME.mdで確認します。
$ cd docker-images/OracleDatabase/SingleInstance/dockerfiles
$ ./buildContainerImage.sh -v 19.3.0 -e -i
コマンドが終了するとイメージが作成されていますので確認します。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
oracle/database 19.3.0-ee 115604b484ae 30 seconds ago 5.52GB
ここでdockerコマンドで起動できれば終わりですが、Windows Serverのコンテナも作らなければいけないので、docker-compose.ymlを作り、Oracle databaseとWindows Serverのコンテナをまとめることにします。
【docker-compose.yml】
services:
db:
container_name: delivery_db
build:
context: .containers/db
dockerfile: Dockerfile
ports:
- 1521:1521
- 5500:5500
volumes:
- .containers/db:/docker-entrypoint-initdb.d
- ordata:/opt/oracle/ordata
environment:
- ORACLE_PWD=password
- ORACLE_SID=orcl
- ORACLE_PDB=orclpdb
volumes:
ordata:
また各種設定を記載するためにデータベースコンテナ用のDockerfileも用意します。
【Dockerfile】
FROM oracle/database:19.3.0-ee
後ほどOracle Databaseの接続ユーザーなどを記載する予定ですがDockerfilesの中身はとりあえずイメージ名だけ記載します。
ここまでできたらOracle Databaseのコンテナをビルドして起動します。
$ docker-compose -f docker-compose.yml build
$ docker-compose -f docker-compose.yml up -d
コンテナが起動するとデータベースの構築が開始されるので、以下のとおり「DATABASE IS READY TO USE!」とDockerのログに表示されるまで数分待ちます。
2024-04-20 02:45:22 The command completed successfully
2024-04-20 02:45:27 Prepare for db operation
2024-04-20 02:45:27 8% complete
2024-04-20 02:45:27 Copying database files
2024-04-20 02:46:38 31% complete
2024-04-20 02:46:38 Creating and starting Oracle instance
2024-04-20 02:46:59 32% complete
2024-04-20 02:47:04 36% complete
2024-04-20 02:49:48 40% complete
2024-04-20 02:49:48 43% complete
2024-04-20 02:50:05 46% complete
2024-04-20 02:50:05 Completing Database Creation
2024-04-20 02:50:07 51% complete
2024-04-20 02:53:03 54% complete
2024-04-20 02:53:03 Creating Pluggable Databases
2024-04-20 02:53:07 58% complete
2024-04-20 02:53:07 77% complete
2024-04-20 02:53:07 Executing Post Configuration Actions
2024-04-20 02:53:07 100% complete
:
:
2024-04-20 02:53:08 SQL> SQL> Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
2024-04-20 02:53:08 Version 19.19.0.0.0
2024-04-20 02:53:08 The Oracle base remains unchanged with value /opt/oracle
2024-04-20 02:53:08 The Oracle base remains unchanged with value /opt/oracle
2024-04-20 02:53:08 #########################
2024-04-20 02:53:08 DATABASE IS READY TO USE!
2024-04-20 02:53:08 #########################
データベースの構築が終了したらsqlplusでアクセスしてみます。
$ sqlplus / as sysdba
SQL> show parameter service;
NAME TYPE VALUE
------------------------------------ ----------- ---------------------------
service_names string ORCL
次にブラウザで「https//localhost:5500/em」にアクセスしてみます。


ENTERPRISE MANAGERにアクセスできたのでOracle Databaseコンテナの作成は完了です。
あとはコンテナをビルドした時にスキーマやアプリケーションで使用する初期データをロードするなどDockerfileで設定する必要がありますが、先にWindows Serverのコンテナを作成することにします。