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
0 件のコメント:
コメントを投稿