はじめまして! h.kitachi と申します。
普段はプログラマーとしてアプリケーション開発などを行っています。
突然ですが、PC のローカル環境にサンドボックスのように使える Oracle Database が欲しくなったことはありませんか?
学習用や実験用にはもちろん、アプリケーション開発業務においても、開発初期や大規模改修の初期段階などでは、チームメンバーに気を使うことなく試行錯誤をしたいことがよくあると思います。
今回は free 版 Oracle Database を Docker コンテナの形で使用する方法をご紹介します。
Docker はインストール済みで、Docker CLI が利用可能になっている前提で話を進めていきます。
Oracle Database コンテナの起動方法
Oracle Container Registry で公開されている Docker イメージを使用して、コマンドひとつで完了です。
docker run -d
--name {コンテナ名}
-p {ホスト側のポート番号}:1521
-e ORACLE_PDB={PDB名}
-e ORACLE_PWD={管理者ユーザーのパスワード}
container-registry.oracle.com/database/free:latest-lite
※ {...} の部分は任意で決めることができます。
※ 改行はレイアウトの都合です。実際のコマンドには含まれません。
とても簡単ですね。
製品バージョンは限られてしまいますが(2025 年 4 月現在は "23ai Free")、冒頭で述べたようなサンドボックス目的ならこれで十分です。
上記の docker run
コマンド実行後、少し待てば、-p
オプションで指定したポートで Oracle Database への接続が可能になります。
正常に起動完了したことを確認したい場合は、コマンド docker logs {コンテナ名}
でコンテナからの出力メッセージを確認します。
以下のメッセージが出力されていれば Oracle Database は正常に起動完了しています。
#########################
DATABASE IS READY TO USE!
#########################
Full イメージと Lite イメージ
Oracle Container Registry の Oracle Database イメージには、Full と Lite が用意されています。
これら二種類のエディションの違いは、以下の通りです。
- Oracle Text などの Oracle Database ならではの拡張機能を含んでいるかどうか
- イメージのファイルサイズ (Full イメージは約 10GB、Lite イメージは約 2GB)
Lite でも RDBMS としての基本機能はしっかり使用できます。
上記の docker run
コマンドでは Lite を指定していますが、もし Full のほうを使いたい場合は、コマンドの最後にあるイメージ名の末尾から -lite
を取り除いて free:latest
にするだけで OK です。
コンテナ間で通信させる
データベースだけでなく、データベースを使用する側となる Web サービスなどもコンテナ化して、相互に通信させたいことがあります。
Docker コンテナは、特に指定がなければデフォルトで用意されている bridge network へ接続されます。
そのため、上記の docker run
コマンドで作成したコンテナに対して、特に手を加えることなく、割り当てられている IP アドレスを調べれば、相互通信することが可能です。
しかしながら、コンテナ起動後に調べる必要のある IP アドレスより、固定的にコンテナ名で通信を行えたほうが便利です。
コンテナ名で通信する場合は、少しだけ、手順が追加となります。
まず、新しい bridge network を作成します。
Docker network create {ネットワーク名}
※ {...} の部分は任意で決めることができます。
明示的に作られた bridge network には独自の DNS 機能が与えられており、コンテナ名によるアドレス解決が可能です。(デフォルトの bridge network に DNS 機能がない理由はよくわかりませんが、後方互換のためという説があるようです。)
あとは、作成した bridge network へ接続する設定で、Oracle Database のコンテナを作り直すだけです。
docker run -d
--name {コンテナ名}
--network {ネットワーク名}
-p {ホスト側のポート番号}:1521
-e ORACLE_PDB={PDB名}
-e ORACLE_PWD={管理者ユーザーのパスワード}
container-registry.oracle.com/database/free:latest-lite
※ {...} の部分は任意で決めることができます。
※ 改行はレイアウトの都合です。実際のコマンドには含まれません。
Oracle Database コンテナが起動したら、試しに、同じく無料で使用できる Oracle SQL Command Line (SQLcl) のコンテナを作って、そこから Oracle Database へアクセスしてみましょう。
docker run --rm -it
--network={ネットワーク名}
container-registry.oracle.com/database/sqlcl:latest
system/{管理者ユーザーのパスワード}@{Oracle Database のコンテナ名}:1521/{PDB名}
※ {...} の部分は任意で決めることができます。
※ 改行はレイアウトの都合です。実際のコマンドには含まれません。
SQLcl は SQL*Plus と同じ感覚で使用できます。
SQL> select username from all_users;
USERNAME
_________________________
SYS
AUDSYS
SYSTEM
...
XX rows selected.
SQLcl から抜けたい場合は exit
コマンドを実行します。
SQL> exit
Disconnected from Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.7.0.25.01
今回作成した SQLcl コンテナは --rm
オプションで起動したので、停止と同時に削除されます。
公式ドキュメント
今回紹介した内容は、以下の手順で参照できる公式ドキュメントから抜粋したものです。
-
ブラウザから https://container-registry.oracle.com へアクセスする。
-
"Browse Containers" - "Database" を選択する。
-
"Repositry" - "free"(Oracle Database Free) を選択する。
コンテナ起動時の動作のカスタマイズなど、本稿で説明しきれなかった情報もたくさん記載されています。
また、Oracle Database 以外の様々な Oracle 製品や、free 版以外の Oracle Database についてもイメージが用意されていますので、レジストリ全体をざっと眺めてみてもよいかもしれません。
まとめ
エンターブライズ・アプリケーションを支える高機能・高性能なデータベース基盤として重用されてきた半面、導入するにはいろいろと敷居の高かった Oracle Database も、ずいぶんと身近になりました。
スタートアップや開発環境は Docker コンテナでフットワーク軽く、ステージング以上の運用環境は Oracle Cloud の Autonomous Database などで簡単に構築・管理、というようなアプローチが可能になったのは嬉しいですね!