原文はこちら。
https://blogs.oracle.com/developer/entry/creating_and_oracle_database_docker
Oracle Database用のDockerビルドファイルがGitHubにリリースされています。
Oracle Technology Network
ダウンロードが完了したら、イメージ作成に取りかかることができます。
https://blogs.oracle.com/developer/entry/creating_and_oracle_database_docker
Oracle Database用のDockerビルドファイルがGitHubにリリースされています。
Oracle Database on Dockerこれらのビルドファイルを使うと、Oracle Databaseの自身のDockerイメージを作成できます。Dockerをご存知ない方は、以下のリンクをどうぞ。
https://github.com/oracle/docker-images/tree/master/OracleDatabase
DockerLinuxコンテナテクノロジーをベースとした、アプリケーションなどをコンテナ化することができる非常にクールなテクノロジーです。データベースのコンテナ化までに要する時間はそれほどかからず、特に開発、検証環境のためには有用です。Oracleが提供しているビルドファイルを使ってOracle Databaseをコンテナ化する方法を見ていきましょう。
https://www.docker.com/
What you need
- Oracle Databaseのインストーラ(Zipファイル)をOTNからダウンロードします。
Oracle Database Software Downloads
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html - GitHubのビルドファイルは、ダウンロードするか、もしくはリポジトリをクローンします。
Official source for Docker configurations, images, and examples of Dockerfiles for Oracle products and projects
https://github.com/oracle/docker-images/
Environment
テストに使った環境は以下の通りです。- Oracle Linux 7.2 (4.1.12-32.2.1.el7uek.x86_64)
- Docker 1.10.3 (docker-engine.x86_64 1.10.3-1.0.3.el7)
- Oracle Database 12.1.0.2 Enterprise Edition
Docker setup
まず、Dockerをセットアップしますが、幸運にもDockerがPublic Yumパッケージとして提供されているので、これは非常に簡単です。作業はdocker-engineパッケージをroot
ユーザとしてインストールするだけでOKです。これでDockerのインストールは終了です。Dockerを開始してイメージビルドを実行する前に、デフォルト設定を微調整して、Oracle Database用に十分なディスクサイズを提供することを確認する必要があります。Dockerはデフォルトのコンテナサイズの最大値が10GBです。このサイズは、通常Dockerコンテナ内で実行するアプリケーションにとっては十分なサイズではありますが、Oracle Database Enterprise Edition実行のためには上限を拡大する必要があります。この例では、15GBまで拡張し、コンテナ内でOracle Databaseとデータをホストできるようにします。もちろん、要件に合わせて上限をもっと大きな値にすることもできます。このデフォルト値を増加するためには、[root@localhost ~]# yum install docker-engine
Loaded plugins: langpacks, ulninfo
Resolving Dependencies
--> Running transaction check
---> Package docker-engine.x86_64 0:1.10.3-1.0.3.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=====================================================================================================================================
Package Arch Version Repository Size
=====================================================================================================================================
Installing:
docker-engine x86_64 1.10.3-1.0.3.el7 ol7_addons 9.6 M
Transaction Summary
=====================================================================================================================================
Install 1 Package
Total download size: 9.6 M
Installed size: 41 M
Is this ok [y/d/N]: y
Downloading packages:
docker-engine-1.10.3-1.0.3.el7.x86_64.rpm | 9.6 MB 00:00:03
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : docker-engine-1.10.3-1.0.3.el7.x86_64 1/1
Verifying : docker-engine-1.10.3-1.0.3.el7.x86_64 1/1
Installed:
docker-engine.x86_64 0:1.10.3-1.0.3.el7
Complete!
[root@localhost ~]#
storage-opt dm.basesize
というストレージオプションを所望の15GBに設定する必要があります。このオプションを/etc/sysconfig/docker-storage
というファイルに追記することで上限を拡大することができます。これで、systemctlを使ってDockerを開始する準備が整いました。[root@localhost ~]# cat /etc/sysconfig/docker-storage
# This file may be automatically generated by an installation program.
# By default, Docker uses a loopback-mounted sparse file in
# /var/lib/docker. The loopback makes it slower, and there are some
# restrictive defaults, such as 100GB max storage.
# If your installation did not set a custom storage for Docker, you
# may do it below.
# Example: Use a custom pair of raw logical volumes (one for metadata,
# one for data).
# DOCKER_STORAGE_OPTIONS = --storage-opt dm.metadatadev=/dev/mylogvol/my-docker-metadata --storage-opt dm.datadev=/dev/mylogvol/my-docker-data
DOCKER_STORAGE_OPTIONS=--storage-opt dm.basesize=15G
先ほど指定したコンテナサイズの上限値の設定が受け入れられたことを、[root@localhost ~]# systemctl start docker
[root@localhost ~]#
docker info
を使って確認することができます(確認するためにはDockerを起動しておく必要があります)。[root@localhost ~]# docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 1.10.3
Storage Driver: devicemapper
Pool Name: docker-251:0-203798656-pool
Pool Blocksize: 65.54 kB
Base Device Size: 16.11 GB
Backing Filesystem:
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 391.4 MB
Data Space Total: 107.4 GB
Data Space Available: 48.37 GB
Metadata Space Used: 774.1 kB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.147 GB
Udev Sync Supported: true
Deferred Removal Enabled: false
Deferred Deletion Enabled: false
Deferred Deleted Device Count: 0
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
WARNING: Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Library Version: 1.02.107-RHEL7 (2015-12-01)
Execution Driver: native-0.2
Logging Driver: json-file
Plugins:
Volume: local
Network: null host bridge
Kernel Version: 4.1.12-32.2.1.el7uek.x86_64
Operating System: Oracle Linux Server 7.2
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 7.795 GiB
Name: localhost.localdomain
ID: AWF3:DGIQ:YX2P:5BWD:KDQP:G3T3:6UNP:UE2W:POTZ:G4VZ:7IYV:BPIB
Obtaining the required files
Dockerが起動すれば、イメージの作成を始めることができます。上述の通り、まずOracle DatabaseのインストールバイナリとDockerビルドファイルの両方が必要で、どちらも入手は簡単です。Oracle Databaseのインストールバイナリについては、通常ダウンロードされる場所からダウンロードします。おそらくOracle Technology Networkがよく利用される場所でしょう。Oracle Technology Network
ダウンロードが完了したら、イメージ作成に取りかかることができます。
oracle
ユーザーで以下の手順を進めます。続いて、Dockerビルドファイルをダウンロードする必要がありますが、色々な方法があります。Gitリポジトリを直接クローンすることもできますが、簡単のため、かつGitに詳しくない人のことを考慮して、GitHubのダウンロードオプションを使うことにします。メインリポジトリに移動し、[Clone or download]の緑色のボタンを確認し、そのボタンをクリックして、”Download Zip”を選択します。[oracle@localhost ~]$ ls -al
total 2625120
drwx------. 15 oracle oracle 4096 Jul 22 13:21 .
drwxr-xr-x. 3 root root 19 Mar 25 20:03 ..
-rw-------. 1 oracle oracle 566 Mar 25 20:52 .bash_history
-rw-r--r--. 1 oracle oracle 18 Sep 11 2015 .bash_logout
-rw-r--r--. 1 oracle oracle 193 Sep 11 2015 .bash_profile
-rw-r--r--. 1 oracle oracle 231 Sep 11 2015 .bashrc
drwx------. 10 oracle oracle 4096 Mar 25 19:06 .cache
drwxr-xr-x. 15 oracle oracle 4096 Mar 25 19:06 .config
drwxr-xr-x. 2 oracle oracle 6 Mar 25 19:05 Desktop
drwxr-xr-x. 2 oracle oracle 6 Mar 25 19:05 Documents
drwxr-xr-x. 2 oracle oracle 6 Mar 25 19:05 Downloads
-rw-------. 1 oracle oracle 16 Mar 25 19:05 .esd_auth
-rw-------. 1 oracle oracle 4030 Mar 25 20:48 .ICEauthority
-rw-------. 1 oracle oracle 57 Mar 25 19:55 .lesshst
-rw-r--r--. 1 oracle oracle 1673544724 Jul 22 13:21 linuxamd64_12102_database_1of2.zip
-rw-r--r--. 1 oracle oracle 1014530602 Jul 22 13:22 linuxamd64_12102_database_2of2.zip
drwx------. 3 oracle oracle 18 Mar 25 19:05 .local
drwxr-xr-x. 4 oracle oracle 37 Mar 25 19:40 .mozilla
drwxr-xr-x. 2 oracle oracle 6 Mar 25 19:05 Music
drwxr-xr-x. 2 oracle oracle 6 Mar 25 19:05 Pictures
drwxr-xr-x. 2 oracle oracle 6 Mar 25 19:05 Public
drwx------. 2 oracle oracle 6 Mar 25 19:33 .ssh
drwxr-xr-x. 2 oracle oracle 6 Mar 25 19:05 Templates
drwxr-xr-x. 2 oracle oracle 6 Mar 25 19:05 Videos
Official source for Docker configurations, images, and examples of Dockerfiles for Oracle products and projectsその他、リポジトリを直接静的URLからダウンロードすることもできます。
https://github.com/oracle/docker-images/
https://github.com/oracle/docker-images/archive/master.zip
Zipファイルをダウンロードしたら、ファイルを展開します。[oracle@localhost ~]$ wget https://github.com/oracle/docker-images/archive/master.zip
--2016-07-22 13:30:14-- https://github.com/oracle/docker-images/archive/master.zip
Resolving github.com (github.com)... 192.30.253.112
Connecting to github.com (github.com)|192.30.253.112|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/oracle/docker-images/zip/master [following]
--2016-07-22 13:30:14-- https://codeload.github.com/oracle/docker-images/zip/master
Resolving codeload.github.com (codeload.github.com)... 192.30.253.120
Connecting to codeload.github.com (codeload.github.com)|192.30.253.120|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4064219 (3.9M) [application/zip]
Saving to: ‘master.zip’
100%[===========================================================================================>] 4,064,219 393KB/s in 6.9s
2016-07-22 13:30:21 (577 KB/s) - ‘master.zip’ saved [4064219/4064219]
[oracle@localhost ~]$ unzip master.zip
Archive: master.zip
ce91c58275d24df32b3f5d3b8a68000ade61d562
creating: docker-images-master/
extracting: docker-images-master/.gitattributes
inflating: docker-images-master/.gitignore
inflating: docker-images-master/.gitmodules
...
...
...
inflating: docker-images-master/README.md
[oracle@localhost ~]$
Building the Oracle Database Docker image
必要なファイルが全てそろったので、Dockerイメージを作成します。docker-images-master/OracleDatabaseのREADME.mdという個別のファイルがあり、このファイルでビルドプロセスを詳細に説明しています。README.md - Oracle Database on Docker
https://github.com/oracle/docker-images/blob/master/OracleDatabase/README.md
docker-images-master/OracleDatabase/dockerfiles
にある buildDockerImage.sh
というシェルスクリプトファイルは、ビルドにおける細々複雑な作業をします。ビルドの際には、正しいバージョンのディレクトリにインストールファイルをコピーすることが必要です。Oracle Database 12.1.0.2 EEイメージを作成する予定なので、ファイルを docker-images-master/OracleDatabase/dockerfiles/12.1.0.2
にコピーする必要があります。buildDockerImage.sh シェルスクリプトファイルを呼び出す準備ができました。このスクリプトは複数のパラメータを取ります。[oracle@localhost ~]$ cd docker-images-master/OracleDatabase/dockerfiles/12.1.0.2/
[oracle@localhost 12.1.0.2]$ cp ~/linuxamd64_12102_database_* .
[oracle@localhost 12.1.0.2]$ ls -al
total 2625144
drwxrwxr-x. 2 oracle oracle 4096 Jul 22 13:50 .
drwxrwxr-x. 4 oracle oracle 62 Jul 21 14:07 ..
-rw-rw-r--. 1 oracle oracle 515 Jul 21 14:07 Checksum.ee
-rw-rw-r--. 1 oracle oracle 523 Jul 21 14:07 Checksum.se2
-rw-rw-r--. 1 oracle oracle 12738 Jul 21 14:07 dbca.rsp
-rw-rw-r--. 1 oracle oracle 9118 Jul 21 14:07 db_inst.rsp
-rw-rw-r--. 1 oracle oracle 5491 Jul 21 14:07 Dockerfile.ee
-rw-rw-r--. 1 oracle oracle 5508 Jul 21 14:07 Dockerfile.se2
-rwxr-xr-x. 1 oracle oracle 773 Jul 21 14:07 installPerl.sh
-rw-r--r--. 1 oracle oracle 1673544724 Jul 22 13:50 linuxamd64_12102_database_1of2.zip
-rw-r--r--. 1 oracle oracle 1014530602 Jul 22 13:50 linuxamd64_12102_database_2of2.zip
-rwxr-xr-x. 1 oracle oracle 120 Jul 21 14:07 runOracle.sh
-v
でバージョンを指定、-e
でEnterprise Editionを作成することを指示、 -p
でDBAアカウントのパスワードを指定します。Dockerは root で動作するため、Dockerデーモンと通信するためにroot権限が必要です。 oracle
ユーザーは既にsudoersに含まれているため、 sudo
でroot権限で実行することができます。[oracle@localhost 12.1.0.2]$ cd ..
[oracle@localhost dockerfiles]$ sudo ./buildDockerImage.sh -v 12.1.0.2 -e -p LetsDocker
[sudo] password for oracle:
Checking if required packages are present and valid...
linuxamd64_12102_database_1of2.zip: OK
linuxamd64_12102_database_2of2.zip: OK
=====================
Building image 'oracle/database:12.1.0.2-ee' ...
Sending build context to Docker daemon 2.688 GB
Step 1 : FROM oraclelinux:latest
latest: Pulling from library/oraclelinux
10ec637c060c: Pull complete
Digest: sha256:583f9e880f9228894555775c720d32eb22bf09cd13009c036d8f19b3257ccb41
Status: Downloaded newer image for oraclelinux:latest
...
...
...
Step 27 : CMD $ORACLE_BASE/runOracle.sh
---> Running in f536fc46e81e
---> a31ab247296b
Removing intermediate container f536fc46e81e
Successfully built a31ab247296b
Oracle Database Docker Image for 'ee' version 12.1.0.2 is ready to be extended:
--> oracle/database:12.1.0.2-ee
ORACLE PASSWORD (SYS, SYSTEM, PDBADMIN): LetsDocker
Build completed in 1204 seconds.
[oracle@localhost dockerfiles]$
Starting and connecting to the Oracle Database in a Docker container
ビルドが成功すれば、Oracle DatabaseをDockerコンテナ内で開始、実行できます。docker run
コマンドに適切なパラメータを付けて呼び出すだけでOKです。重要なパラメータの一つに、コンテナ内部のポート番号を外部世界とマッピングする -p
があります。当然ながら、Dockerコンテナの外部からデータベースに接続するため、このパラメータを使う必要があります。別の有用なパラメータには --name
があります。これを使うと、指定した名前で新たにDockerコンテナを作成することができます。このパラメータを使うと、自動生成されたIDや名前を使わずに指定した名前でコンテナを参照することができます。利便性のため、コンテナ開始スクリプトはOracle Databaseを起動するだけでなく、Oracle Databaseのalert.logファイルを[oracle@localhost dockerfiles]$ sudo docker run -p 1521:1521 --name gvenzl oracle/database:12.1.0.2-ee
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 25-JUL-2016 17:23:07
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Starting /opt/oracle/product/12.1.0.2/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 12.1.0.2.0 - Production
System parameter file is /opt/oracle/product/12.1.0.2/dbhome_1/network/admin/listener.ora
Log messages written to /opt/oracle/diag/tnslsnr/78c750640f31/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date 25-JUL-2016 17:23:09
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Default Service ORCLCDB
Listener Parameter File /opt/oracle/product/12.1.0.2/dbhome_1/network/admin/listener.ora
Listener Log File /opt/oracle/diag/tnslsnr/78c750640f31/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
The listener supports no services
The command completed successfully
SQL*Plus: Release 12.1.0.2.0 Production on Mon Jul 25 17:23:09 2016
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to an idle instance.
SQL> ORACLE instance started.
Total System Global Area 1610612736 bytes
Fixed Size 2924928 bytes
Variable Size 520097408 bytes
Database Buffers 1073741824 bytes
Redo Buffers 13848576 bytes
Database mounted.
Database opened.
SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
Mon Jul 25 17:23:23 2016
===========================================================
Dumping current patch information
===========================================================
No patches have been applied
===========================================================
Starting background process CJQ0
Mon Jul 25 17:23:23 2016
CJQ0 started with pid=29, OS id=194
Completed: ALTER DATABASE OPEN
Mon Jul 25 17:23:24 2016
db_recovery_file_dest_size of 4560 MB is 0.00% used. This is a
user-specified limit on the amount of space that will be used by this
database for recovery-related files, and does not reflect the amount of
space available in the underlying filesystem or ASM diskgroup.
tail -f
で表示します。これは簡単に潜在的な問題の目星を付けやすくするためです。コンテナが動作し、1521/tcpが外部世界にマッピングされているので、コンテナ内のデータベースに接続することができます。[oracle@localhost ~]$ sql system/LetsDocker@//localhost:1521/ORCLPDB1
SQLcl: Release 4.2.0.16.175.1027 RC on Mon Jul 25 13:31:03 2016
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Last Successful login time: Mon Jul 25 2016 13:31:04 -04:00
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL> grant connect, resource to gvenzl identified by supersecretpwd;
Grant succeeded.
SQL> conn gvenzl/supersecretpwd@//localhost:1521/ORCLPDB1
Connected.
Stopping the Oracle Database Docker container
Dockerコンテナを停止したい場合は、docker stop
コマンドを使って停止できます。このコマンドにコンテナ名を付けて呼び出すだけです。[oracle@localhost ~]$ sudo docker stop gvenzl
gvenzl
Summary
これで、Dockerを使ってOracle Databaseをコンテナ化する方法のチュートリアルは終了です。OracleはOracle Databaseの他のEditionのビルドファイルも提供しており、手順は上述のものとほぼ同じですが、ビルドファイルに付属するREADME.mdを常に参照するよう心がけてください。Oracle Database on Docker
https://github.com/oracle/docker-images/tree/master/OracleDatabase