My開発メモ

DockerでOracleDatabase11gを動かす

Oracle Database 19c は多機能すぎて、よくわからない。
それと、参考にしている本が、12c、11g、10gにしか対応して いないので、19cはやめにした。
で、Oracleのサイトからダウンロードできるのは 11g。

dockerイメージの作成

適当なディレクトリにて、以下を実行。

今回は、$HOME/Docker にておこなう。このディレクトリは Docker関連専用である。

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

ダウンロードしたフォルダで作業する。

ディレクトリ名をわかりやすいように oracle-docker-images に変更した。

$ cd oracle-docker-images/OracleDatabase/SingleInstance/dockerfiles

dockerfilesディレクトリの中は、バージョン毎にディレクトリが 設けられている。

今回は、11g をインストールしたいので、11.2.0.2ディレクトリを 使うことになる。

Oracleのサイトから、目的バージョンのzipファイルをダウンロードする。

Oracle Database Express Edition (XE) Release 11.2.0.2.0 (11gR2)

Oracle Database 11gR2 Express Edition for Linux x64という項目名である。

それを dockerfiles/11.2.0.3ディレクトリの中に置く。zipのまま。

そして、dockerfilesディレクトリにて、以下を実行。

$ ./buildDockerImage.sh -v 19.3.0 -x

-x オプションは -x: creates image based on ‘Express Edition’ である。

(buildContainerImage.shの中を参照のこと)

ビルドが終わると以下のようなメッセージが出る。

Successfully built cc6d6df0fe12
Successfully tagged oracle/database:11.2.0.2-xe


  Oracle Database container image for 'xe' version 11.2.0.2 is ready to be extended: 
    
    --> oracle/database:11.2.0.2-xe

  Build completed in 129 seconds.
$ docker images

REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
oracle/database              11.2.0.2-xe         cc6d6df0fe12        59 seconds ago      1.15GB
oraclelinux                  7-slim              aec958857e72        4 days ago          132MB
...

dockerで動かす

コンテナを起動する。

$ docker run --shm-size=1g --name docker_oracle11 \
 -p 1521:1521 -p 5500:5500 oracle/database:11.2.0.2-xe
ORACLE PASSWORD FOR SYS AND SYSTEM: XXXXXXXXXXXXXXXX

Oracle Database 11g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 11g Express 
Edition.  The following questions will determine whether the database should 
be starting upon system boot, the ports it will use, and the passwords that 
will be used for database accounts.  Press <Enter> to accept the defaults. 
Ctrl-C will abort.

Specify the HTTP port that will be used for Oracle Application Express [8080]:
Specify a port that will be used for the database listener [1521]:
Specify a password to be used for database accounts.  Note that the same
password will be used for SYS and SYSTEM.  Oracle recommends the use of 
different passwords for each database account.  This can be done after 
initial configuration:
Confirm the password:

Do you want Oracle Database 11g Express Edition to be started on boot (y/n) [y]:
Starting Oracle Net Listener...Done
Configuring database...

ここでだいぶ時間がかかる。

...
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
  Current log# 5 seq# 4 mem# 0: /u01/app/oracle/oradata/XE/redo05.log
      ALTER DATABASE DROP LOGFILE GROUP 1
Deleted Oracle managed file /u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_1_j0qs639v_.log
Completed:       ALTER DATABASE DROP LOGFILE GROUP 1
      ALTER DATABASE DROP LOGFILE GROUP 2
Deleted Oracle managed file /u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_2_j0qs64dn_.log
Completed:       ALTER DATABASE DROP LOGFILE GROUP 2
Cleared LOG_ARCHIVE_DEST_1 parameter default value
Using LOG_ARCHIVE_DEST_1 parameter default value as /u01/app/oracle/product/11.2.0/xe/dbs/arch
ALTER SYSTEM SET db_recovery_file_dest='' SCOPE=BOTH;
$ docker container ls

以下のように出力されるので、docker_oracleという名前を確認する。

CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                 PORTS                                            NAMES
e01098a7fd90        oracle/database:19.3.0-ee   "/bin/sh -c 'exec $O…"   2 hours ago         Up 2 hours (healthy)   0.0.0.0:1521->1521/tcp, 0.0.0.0:5500->5500/tcp   docker_oracle

コンテナにログインする。

まず、Sqlplusをインストールして、Sqlplusを起動する。

Sqlplusのインストール(Ubuntu)

$ splplus system@localhost:1521

すると、以下のようにパスワードを聞かれる。

SQL*Plus: Release 21.0.0.0.0 - Production on Sat Jan 23 18:08:03 2021
Version 21.1.0.0.0

Copyright (c) 1982, 2020, Oracle.  All rights reserved.

Enter password: 

ここで、先程 docker run … したときに出たメッセージを見る。

ORACLE PASSWORD FOR SYS AND SYSTEM: XXXXXXXXXXXXXXX
...

XXXXXXXXXXXX(実際は英数字である) — これがデフォルトのパスワードである。

ログイン後の表示は以下である。

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> 

コンテナの中に入るのは、これである。

$ docker exec -it docker_oracle bash -c "source /home/oracle/.bashrc; sqlplus /nolog"

docker-compose で運用する

docker run … で記述する内容を docker-compose.yml に書いておいたら楽になる。

Docker/oracleディレクトリの中に docker-compose.yml を置くことにする。

docker-compose.yml

version: '3'

services:
    database:
        image: oracle/database:11.2.0.2-xe
        volumes:
            - ./oradata:/opt/oracle/oradata
        ports:
            - 1521:1521
            - 8080:8080
            - 5500:5500
        container_name: docker-oracle11
        shm_size: '1gb'

以下を実行する。

$ docker-compose up

以下のように表示される。

Creating network "oracle_default" with the default driver
Creating docker-oracle11 ... done
Attaching to docker-oracle11
docker-oracle11 | ORACLE PASSWORD FOR SYS AND SYSTEM: XXXXXXXXXX
docker-oracle11 | 
docker-oracle11 | Oracle Database 11g Express Edition Configuration
docker-oracle11 | -------------------------------------------------
docker-oracle11 | This will configure on-boot properties of Oracle Database 11g Express 
docker-oracle11 | Edition.  The following questions will determine whether the database should 
docker-oracle11 | be starting upon system boot, the ports it will use, and the passwords that 
docker-oracle11 | will be used for database accounts.  Press <Enter> to accept the defaults. 
docker-oracle11 | Ctrl-C will abort.
docker-oracle11 | 
docker-oracle11 | Specify the HTTP port that will be used for Oracle Application Express [8080]:
docker-oracle11 | Specify a port that will be used for the database listener [1521]:
docker-oracle11 | Specify a password to be used for database accounts.  Note that the same
docker-oracle11 | password will be used for SYS and SYSTEM.  Oracle recommends the use of 
docker-oracle11 | different passwords for each database account.  This can be done after 
docker-oracle11 | initial configuration:
docker-oracle11 | Confirm the password:
docker-oracle11 | 
docker-oracle11 | Do you want Oracle Database 11g Express Edition to be started on boot (y/n) [y]:
docker-oracle11 | Starting Oracle Net Listener...Done

しばらく時間がかかるが、以下のように表示される。

docker-oracle11 | #########################
docker-oracle11 | DATABASE IS READY TO USE!
docker-oracle11 | #########################
docker-oracle11 | The following output is now a tail of the alert.log:
docker-oracle11 |   Current log# 5 seq# 4 mem# 0: /u01/app/oracle/oradata/XE/redo05.log
docker-oracle11 |       ALTER DATABASE DROP LOGFILE GROUP 1
docker-oracle11 | Deleted Oracle managed file /u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_1_j0r3xrcv_.log
docker-oracle11 | Completed:       ALTER DATABASE DROP LOGFILE GROUP 1
docker-oracle11 |       ALTER DATABASE DROP LOGFILE GROUP 2
docker-oracle11 | Deleted Oracle managed file /u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_2_j0r3xslg_.log
docker-oracle11 | Completed:       ALTER DATABASE DROP LOGFILE GROUP 2
docker-oracle11 | Cleared LOG_ARCHIVE_DEST_1 parameter default value
docker-oracle11 | Using LOG_ARCHIVE_DEST_1 parameter default value as /u01/app/oracle/product/11.2.0/xe/dbs/arch
docker-oracle11 | ALTER SYSTEM SET db_recovery_file_dest='' SCOPE=BOTH;

とりあえず、今日はここまで。

追記(2021.01.25)

docker-compose.yml に以下のようにすると、初期パスワードを設定できる。

また、ついでにタイムゾーンと文字コードも設定しておく。

docker-compose.yml

version: '3'

services:
    database:
        image: oracle/database:11.2.0.2-xe
        volumes:
            - ./oradata:/opt/oracle/oradata
        ports:
            - 1521:1521
            - 8080:8080
            - 5500:5500
        container_name: docker-oracle11
        shm_size: '1gb'
        environment:
            - ORACLE_PWD=manager            # <==
            - TZ=Asia/Tokyo
            - NLS_LANG=Japanese_Japan.AL32UTF8

これで、sys および system の初期パスワードが manager になる。

また、Sqlplusからの応答が日本語になる。

参考

カテゴリー: memo, OracleDB

タグ: Docker, oracle, oracle11g

カウント: 177