zukucode
主にWEB関連の情報を技術メモとして発信しています。

無償版のOracleをDockerで構築する

無償版(Express Edition)のOracleDockerで構築する作業メモです。

MySQLPostgreSQLなどは公式が提供しているコンテナイメージなどをそのまま使用すれば簡単に構築できますが、Oracleの場合は自分でコンテナイメージを作成する必要があります。

Oracle Databaseのダウンロード

以下のページのOracle Database 21c Express Edition for Linux x64 ( OL8 )リンクからOracle Database 21c Express Editionをダウンロードします。

https://www.oracle.com/jp/database/technologies/xe-downloads.html

Dockerコンテナで使用するため、Linux版を使用します。

OracleのDockerイメージのダウンロード

以下のリポジトリを取得します。

https://github.com/oracle/docker-images

$ git clone https://github.com/oracle/docker-images.git

イメージの作成

ダウンロードしたDockerイメージの以下のパスに、先程ダウンロードしたOracle Databaseのファイルを配置します。

ファイル名は「oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm」などの名前だと思いますが、解凍などは必要なく、そのままコピーします。

21.3.0のフォルダはOracle Databaseのバージョンに対応しているようなので、21c以外を使用する場合はフォルダも変更してください。

/docker-images/OracleDatabase/SingleInstance/dockerfiles/21.3.0

以下のコマンドでイメージを作成します。

$ cd docker-images\OracleDatabase\SingleInstance\dockerfiles\
$ .\buildContainerImage.sh -v 21.3.0 -x -i

スクリプトのオプションは公式ドキュメントで確認できます。

-xオプションで無償版(Express Edition)のOracle Databaseを作成します。

イメージが作成されたことを確認します。

$ docker image
REPOSITORY              TAG                     IMAGE ID       CREATED         SIZE
oracle/database         21.3.0-xe               66993ce9ccd5   6 days ago      6.53GB

コンテナの起動

docker-compose.ymlの設定に以下を追記します。

docker-compose.yml
version: "3.2"
services:
  db:
    image: oracle/database:21.3.0-xe
    ports:
      - 1521:1521
    volumes:
      - oradata:/opt/oracle/oradata
    environment:
      - ORACLE_PWD=oracle
volumes:
  oradata:

docker-compose upでコンテナを起動し、DATABASE IS READY TO USE!のログが表示されればOracleは正常に起動しています。

初回は起動に時間がかかります。(5分位かかったと思います)

Oracleのデータを永続化するためにvolumesを設定しますが、永続化のファイルを格納するフォルダを以下のようにプロジェクト内のフォルダを指定する場合、権限のエラーが発生することがあるので、注意が必要です。

docker-compose.yml(エラーになる)
volumes:
    - oradata:/opt/oracle/oradata
    - ./test:/opt/oracle/oradata

Cannot create directory "/opt/oracle/oradata/XE".

接続確認

CloudBeaverで接続確認を行います。

設定手順や接続情報はDocker ComposeでCloudBeaverを導入するDocker環境に構築したOracleをCloudBeaverで接続するで紹介しています。


関連記事