2019-01-06

Ubuntu 16.04 x86_64 で Oracle database 18.3 Docker コンテナ

2018年9月に作ったときのメモが残っていたので投稿。

注意: 2022年現在では gvenzl/oracle-xe を使ったほうが楽。以下の手順では事前に Oracle Database の zip ファイルのダウンロードが必要だが、gvenzl/oracle-xe ならば docker image の中に含まれている。

Docker のインストール

$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install -y docker-ce

Dockerイメージの作成

事前に LINUX.X64_180000_db_home.zip をダウンロードしておく。
$ git clone https://github.com/oracle/docker-images.git
$ cd docker-images/OracleDatabase/SingleInstance/dockerfiles/18.3.0
$ ln ~/Downloads/LINUX.X64_180000_db_home.zip .
$ cd ..
$ sudo ./buildDockerImage.sh -v 18.3.0 -e
$ sudo groupadd -g 54321 oracle
$ sudo useradd -u 54321 -g oracle oracle
$ sudo mkdir -p /var/oradata/ora183
$ sudo chown -R oracle:oracle /var/oradata

Dockerコンテナの実行

$ sudo docker run --name コンテナ名 -p 1521:1521 -p 5500:5500 -e ORACLE_PWD=manager -v /var/oradata/ora183:/opt/oracle/oradata oracle/database:18.3.0-ee
上記コマンドの引数の説明はここを参照。 ローカルホストの 1521 番ポートにアクセスするとコンテナ内の 1521 番ポートに転送される。
$ sqlplus system/manager@//localhost:1521/ORCLPDB1
ただし、この接続方法だと OOB を通さないので、 クライアントからのSQL実行のキャンセルが効かない。実行キャンセルを行う場合は Docker コンテナのIPアドレスを調べてそこに接続すること。
$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' コンテナ名
172.17.0.2
$ sqlplus system/manager@//172.17.0.2:1521/ORCLPDB1
SGAは以下の設定だった。
SQL> show sga

Total System Global Area 1610608648 bytes
Fixed Size                  8896520 bytes
Variable Size             419430400 bytes
Database Buffers         1174405120 bytes
Redo Buffers                7876608 bytes
SQL> show parameter target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target                   integer     0
db_big_table_cache_percent_target    string      0
db_flashback_retention_target        integer     1440
fast_start_io_target                 integer     0
fast_start_mttr_target               integer     0
memory_max_target                    big integer 0
memory_target                        big integer 0
parallel_servers_target              integer     32
pga_aggregate_target                 big integer 512M
sga_target                           big integer 0
target_pdbs                          integer     3