背景
会社でOracleを勉強することになり、環境構築の選択肢の一つであるDockerでOracle Databaseを構築したため備忘録として記載します。
2021/04/23に書いた記事なので、現在はアップデートされて記事の通りに構築できなくなっているかもしれません。
前提条件
- OS: Mac OS Catalina (10.15.7)
- Docker: 20.10.5(インストール済み)
- Oracle Database version : 12c (12.1.0.2.0)
構築手順手順
1. githubリポジトリをクローン
- URL: https://github.com/oracle/docker-images
- dockerイメージを作成できる
2. データベースファイルをダウンロード
- 手順1でリポジトリをクローンしただけではイメージを作成できません…
- バイナリファイルをダウンロードする必要があります。
バイナリファイルをダウンロード
Oracle Software Delivery Cloudから対象のバージョンをダウンロードできます。
- 本記事では12c (12.1.0.2.0)のバイナリファイルをダウンロードします。
- Oracleアカウントが必要なので持っていない方は作成する必要があります。
- 以下3つのキャプチャはOracle Software Delivery Cloudより引用しました。
サインインをすると検索ページが開くので、「Oracle Database 12c」と入力して検索すると以下のような一覧が出て赤枠をクリックする
赤枠をクリックすると画面の右上(青枠)に「View Items / Continue」が表示されるので「Continue」をクリック
以下の画面に進むかと思いますが、「Oracle Database 12.1.0.2.0」にチェックして「Continue」をクリック
その後にオラクルライセンスに同意すればダウンロードができるようになります。
3. イメージの作成
手順1でクローンしたdocker-imagesの以下のディレクトリに手順2でダウンロードしたバイナリを置きます。
この時、zipのファイル名を以下のように変更する必要があります。
- V46095-01_1of2.zip -> linuxamd64_12102_database_1of2.zip
- V46095-01_2of2.zip -> linuxamd64_12102_database_2of2.zip
docker-images/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2
バイナリファイルを置いたら、以下のコマンドを実行すればイメージが作成されます。
(完了するまでに時間がかかります。)
$ sh buildContainerImage.sh -v 12.1.0.2 -e -i
4. docker-compose.ymlを作成
環境変数は以下以外にも設定できる => 詳しくはこちら
version: '3'
services:
oracle:
image: oracle/database:12.1.0.2-ee
container_name: oracle_study
ports:
- 1521:1521
- 5500:5500
volumes:
- (任意の場所)
environment:
ORACLE_PWD: (任意のパスワード)
5. コンテナを起動
docker-compose up
を実行すると時間はかかるがコンテナが起動されてデータベースが作成されます。
ちなみにコンソールに出力された3行目にパスワードが表示されます。
環境変数でパスワードを指定しない場合は自動生成されたパスワードが表示されます。
oracle_study | ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: (任意のパスワード)
コンソールに以下の内容が出力されたら正常に起動されています。
oracle_study | #########################
oracle_study | DATABASE IS READY TO USE!
oracle_study | #########################
6. 接続確認
DBeaverで接続しましたが、以下の接続設定で接続することができると思います。
Databaseは環境変数で指定していないので、デフォルトの「ORCLCDB」となっています。
備忘録
- 1コンテナに1データベースが作成されます。
- 複数のデータベースを作成したい場合は複数のコンテナを作成すれば良いです。
- dockerのリソースを多めに確保しておいた方が良いかもです。