10
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DockerでOracle Databaseを構築してみる

Posted at

はじめに

Dockerを利用してOracle環境を構築した経験があるため、OracleのDockerイメージをビルドし、SQLPlusを起動するまでのプロセスをまとめてみます。

前提条件

1. Dockerファイルの準備

今回はOracleの公式GitHubリポジトリからcloneします。

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

2. Dockerイメージのビルド

23cのバージョンのdocker imageをビルドします。

cd OracleDatabase/SingleInstance/dockerfiles
./buildContainerImage.sh -v 23.3.0 -f

ビルドが完了するのに時間がかかりますが、以下のメッセージがでたら成功しています。

Build completed in 383 seconds.

今回は簡単のため23cのバージョンをビルドしていますが、

18c XE, 21c XE and 23c FREE以外のバージョンだとOracleの公式サイトからLinux x86-64 のバイナリデータをダウンロードしてdockerfiles直下のフォルダに配置する必要があります。

詳細はREADMEをご覧ください。

3. Dockerイメージの確認

ビルドが完了したら、次のコマンドを実行してイメージが正しく作成されたことを確認します。

dockerfiles % docker images
REPOSITORY        TAG               IMAGE ID       CREATED          SIZE
oracle/database   23.3.0-free       2ddf79c13a25   44 minutes ago   5.28GB

4. コンテナの起動

次のコマンドを使用してOracle Databaseのコンテナを起動します。

dockerfiles % docker run -d --name oracle-db -e ORACLE_PWD=password oracle/database:23.3.0-free
  • docker run: Dockerコンテナを新しく作成して実行するためのコマンドです。
  • -d: デタッチモードでコンテナを実行します。つまり、コンテナがバックグラウンドで実行され、コマンドラインから即時に制御が戻ります。
  • --name oracle-db:このオプションを使用して、作成されるコンテナにoracle-dbという名前を割り当てます。これにより、将来的にこのコンテナを参照したり操作したりする際に、コンテナIDの代わりにこの名前を使用できます。
  • -e ORACLE_PWD=password: 環境変数ORACLE_PWDpasswordを設定します。この環境変数は、データベースのSYS、SYSTEM、およびPDBの管理ユーザーのパスワードを設定するために使用されます。ここでのpasswordは、実際に使用する強力なパスワードに置き換えるべきです。
  • oracle/database:23.3.0-free: コンテナのイメージを指定します。ここでは先ほど作成したoracle/databaseというイメージの23.3.0-freeというタグを使用しています。

5. コンテナ確認

次のコマンドを使用してコンテナが起動しているか確認します。

dockerfiles % docker ps 

起動しているとSTATUSUPになっています。

CONTAINER ID   IMAGE                         COMMAND                   CREATED      STATUS                PORTS      NAMES
e078c7a5b2a7   oracle/database:23.3.0-free   "/bin/bash -c $ORACL…"   2 days ago   Up 2 days (healthy)   1521/tcp   oracle-db

6. SQLPlus起動

まず、起動したコンテナに入ります。

dockerfiles % docker exec -it oracle-db bash
  • docker exec: 実行中のコンテナ内で任意のコマンドを実行するためのコマンドです。
  • it: このオプションは二つのフラグを組み合わせたものです。i(または-interactive)は、対話的な操作を可能にします。t(または-tty)は、コンテナ内で対話式シェルを使用することができるようになります。
  • oracle-db: 実行するコンテナの名前です。この場合、oracle-dbは以前にdocker runコマンドで-nameオプションを使用して名前付けされたコンテナの名前です。
  • bash: コンテナ内で実行されるコマンドです。この例では、bashシェルを開始します。これにより、ユーザーはコンテナのbash環境で対話的にコマンドを実行できるようになります。

コンテナ内で以下のコマンドでSQLPlusを起動します。

bash-4.4$ sqlplus system/password@//localhost:1521/FREEPDB1
  • sqlplus: Oracle SQL*Plusツールを起動するコマンドです。

  • system/password: データベースに接続するためのユーザー名とパスワードです。ここでsystemはユーザー名を、passwordはそのユーザーのパスワードを指します。systemはOracle Databaseのデフォルトの管理ユーザーの一つであり、データベース管理に広範な権限を持っています。passwordは接続時に必要な実際のパスワードに置き換えてください。

  • @//localhost:1521/FREEPDB1: 接続文字列で、データベースへの接続情報を提供します。

    • localhost: この場合、データベースがローカルマシン上で実行されていることを意味します。リモートデータベースに接続する場合は、localhostをデータベースサーバーのホスト名またはIPアドレスに置き換えます。
    • 1521: Oracle Databaseがリッスンしているポート番号です。1521はOracleのデフォルトのポート番号です。
    • FREEPDB1: データベースのサービス名です。Oracle Database 12c以降では、マルチテナントアーキテクチャを採用しており、このサービス名はプラグ可能なデータベース(PDB)を指します。FREEPDB1は具体的なPDBの名前であり、実際に接続したいPDBの名前に置き換える必要があります。

    以下のようなコマンドが出てきたら起動成功です。

    Connected to:
    Oracle Database 23c Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
    Version 23.3.0.23.09
    

    7. コンテナの停止、削除

    不要になったコンテナは以下のコマンドで停止、削除を行ってください。

    docker stop oracle-db
    docker rm oracld-db
    

    docker stop: このコマンドは、実行中のDockerコンテナを停止するために使用されます。

    docker rm: このコマンドは、停止されている(または実行中でない)Dockerコンテナを削除するために使用されます。

    oracle-db: 停止、削除するコンテナの名前を指定します。

    まとめ

    この記事では、Dockerを使用してOracle Databaseを構築する方法を紹介しました。

    Oracle Databaseの試用や学習が気軽に行えるため、ぜひ試してみてください。

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?