MacOSX
oracle
docker

Oracle on docker for Mac

はじめに

先日、自社の社内勉強会で
「dockerはとにかく軽い!」
「構築が簡単!」
と聞いてから、dockerを使いたくてウズウズしていたので、
docker上にOracleDBを構築してみた。

ので、速攻で構築できる方法を記事にしたいと思う。

dockerインストール

公式サイトからDocker for Macをダウンロードする。

https://store.docker.com/editions/community/docker-ce-desktop-mac

スクリーンショット 2018-05-13 11.30.02.png

ダウンロードしてきた「Docker.dmg」を開き、
Applicationsに追加。
スクリーンショット 2018-05-13 11.58.13.png

Applicationsにいるクジラさんをクリック。スクリーンショット 2018-05-13 12.05.56.png

インストーラーにしたがって、
インストール(画像撮り忘れた。。。)
すると、メニューバーにこいつが出てくる。スクリーンショット 2018-05-13 12.11.41.png

こいつをクリックすると、
スクリーンショット 2018-05-13 13.02.19.png
dockerが起動しているのがわかる。

これで、dockerにOracleを乗せる準備完了。

正しくインストールされているのか、確認する方法として
もう一つ、ターミナルで、

$ docker info

を入力してdockerのバージョンとか表示されれば、
正しくインストールされている。
(dockerコマンドが使えるようになっていることの確認)

Oracle on docker

ここからは@lethe2211さんのQiita記事を参考に、
docker上にOracleDBを構築する。

@lethe2211さんの記事↓
https://qiita.com/lethe2211/items/0bb493fa93a0088cfac9

@lethe2211さんの記事から引用。

コンテナを起動するまでの手順として,大きく分けて,

・Dockerfile(とビルド用スクリプト)をGithubから入手
・Oracle DBのバイナリを入手
・ビルドしてイメージを作成
・イメージからコンテナを起動
の4段階のプロセスがある.

この手順通りにやったら出来た。
@lethe2211さん、ありがとうございます!)

ので、以下手順を書いていく。

Oracle公式のDockerfileを導入

@lethe2211さんにならって
任意の場所にDockerfileを落としてくるディレクトリ構築。
ターミナルで「mkdir」コマンドを使って下記階層を作ろう。

/path/to/src/directory

そして移動、

$ cd /path/to/src/directory

GithubからこのディレクトリにDockerfileを落としてくる。

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

gitが入ってない人はgitコマンドが使えないので、下記のURLからgitを入れてね。
https://git-scm.com/
(gitの入れ方は割愛させていただきます。)

下記コマンドを使うと、

$ ls
docker-images

っていうディレクトリが出来てて、Dockerfileがダウンロードされたのが分かる。

Oracle DBのバイナリを入手

バイナリ入手には、ライセンスが必要。
ライセンスの取得方法は
@lethe2211さんの記事が大変参考になる
ので、いっぱい引用させていただきやす。

開発者向けにOracle Databaseを入手するためには,事前にOTN開発者ライセンスの入手(無償)が必要.
規約をよく読んでから入手.

・OTN Developer License Terms - Oracle

http://www.oracle.com/technetwork/jp/licenses/standard-license-152015.html
・自分用Oracle DBを「無償で」作ろう!「OTN開発者ライセンス」

https://blogs.oracle.com/oracle4engineer/entry/oracle_>db_-otn_developer_license
その後,製品のダウンロードページへ行く.
http://www.oracle.com/technetwork/database/enterprise->edition/downloads/index.html

ライセンスを作ったら、上記引用文の製品ダウンロードページで、最新版(この記事記載時点ではver12.2.0.1.0)をダウンロードしよう。
スクリーンショット 2018-05-13 14.59.16.png

ビルドしてイメージを入手

カレントディレクトリが、

/path/to/src/directory

の状態から、

$ cd /docker-images/OracleDatabase/SingleInstance

へ移動。

「ls」コマンドを使うと、
「12.2.0.1」というディレクトリと、
「buildDockerImage.sh」というファイル
があるはず。

まず先程ダウンロードしたOracleDBのバイナリ(linuxx64_12201_database.zip)を、
「12.2.0.1」というディレクトリに移動させる。

$ mv /Users/{ユーザー}/Downloads/linuxx64_12201_database.zip /path/to/src/directory/docker-images/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1

「./ファイル名」で「buildDockerImage.sh」を実行し、バイナリをビルドして
dockerイメージを入手する。

./buildDockerImage.sh -v 12.2.0.1 -e -i

オプションの「-v」は、Oracleのバージョンを指定。
オプションの「-e」は、Oracle Databaseのエディションを「Enterprise Edition(EE)」に指定。
オプション「-i」は、

OS Xではデフォルトでmd5sumコマンドが用意されておらず,iオプションをつけてMD5チェックサムの確認をしないようにする

ために必要らしい。(-iを付けないとビルドが上手くいかない)

しばらく待つとイメージがインストールされる。
インストールが完了したら、

$ docker images

を入力し、

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
oracle/database     12.2.0.1-ee         09c2c4113ded        4 weeks ago         13.3GB

上記の様に表示されていれば、イメージのビルドが成功している。

イメージからコンテナを形成

docker runコマンドでコンテナを形成。

docker run --name docker_oracle -p 1521:1521 oracle/database:12.2.0.1-ee

オプション「--name」でコンテナ名を「docker_oracle」にしている。
オプション「-p」でポート番号を1521に指定。

上記、コマンドを入力後以下の様にコンテナを形成していく。
(ここが鬼門なので、成功例を全部載せちゃう)

ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: {初期PASSWORD}

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 23-APR-2018 20:49:14

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Starting /opt/oracle/product/12.2.0.1/dbhome_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 12.2.0.1.0 - Production
System parameter file is /opt/oracle/product/12.2.0.1/dbhome_1/network/admin/listener.ora
Log messages written to /opt/oracle/diag/tnslsnr/c39cc97df02e/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.2.0.1.0 - Production
Start Date                23-APR-2018 20:49:14
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/12.2.0.1/dbhome_1/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/c39cc97df02e/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
[WARNING] [DBT-11209] Current available physical memory is less than the required physical memory (2,048MB) for creating the database.
[WARNING] [DBT-10102] The listener configuration is not selected for the database. EM DB Express URL will not be accessible.
   CAUSE: The database should be registered with a listener in order to access the EM DB Express URL.
   ACTION: Select a listener to be registered or created with the database.
Copying database files
1% complete
13% complete
25% complete
Creating and starting Oracle instance
26% complete
30% complete
31% complete
35% complete
38% complete
39% complete
41% complete
Completing Database Creation
42% complete
43% complete
44% complete
46% complete
47% complete
50% complete
Creating Pluggable Databases
55% complete
75% complete
Executing Post Configuration Actions
100% complete
Look at the log file "/opt/oracle/cfgtoollogs/dbca/orcl/orcl.log" for further details.

SQL*Plus: Release 12.2.0.1.0 Production on Mon Apr 23 20:55:08 2018

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> 
System altered.

SQL> 
Pluggable database altered.

SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
The Oracle base remains unchanged with value /opt/oracle
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
ORCLPDB1(3):CREATE SMALLFILE TABLESPACE "USERS" LOGGING  DATAFILE  '/opt/oracle/oradata/orcl/ORCLPDB1/users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT  1280K MAXSIZE UNLIMITED  EXTENT MANAGEMENT LOCAL  SEGMENT SPACE MANAGEMENT  AUTO
2018-04-23T20:55:07.244411+00:00
Resize operation completed for file# 4, old size 66560K, new size 71680K
ORCLPDB1(3):Completed: CREATE SMALLFILE TABLESPACE "USERS" LOGGING  DATAFILE  '/opt/oracle/oradata/orcl/ORCLPDB1/users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT  1280K MAXSIZE UNLIMITED  EXTENT MANAGEMENT LOCAL  SEGMENT SPACE MANAGEMENT  AUTO
ORCLPDB1(3):ALTER DATABASE DEFAULT TABLESPACE "USERS"
ORCLPDB1(3):Completed: ALTER DATABASE DEFAULT TABLESPACE "USERS"
2018-04-23T20:55:08.398996+00:00
ALTER SYSTEM SET control_files='/opt/oracle/oradata/orcl/control01.ctl' SCOPE=SPFILE;
   ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATE
Completed:    ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATE
2018-04-23T21:04:07.553677+00:00
Warning: VKTM detected a forward time drift. 
Please see the VKTM trace file for more details:
/opt/oracle/diag/rdbms/orcl/orcl/trace/orcl_vktm_2062.trc
2018-04-23T21:04:54.869186+00:00
ORCLPDB1(3):Resize operation completed for file# 10, old size 337920K, new size 358400K

この後もスクリプトが続いてどうしていいか分からなくなるが、
閉じるボタンを押して閉じてしまって大丈夫。
(今のところ問題なし。スクリプトの抜け方あるのかな?)

パスワードは最初の方に、

ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: {初期PASSWORD}

で表示されるので、見逃すことなかれ。

#########################
DATABASE IS READY TO USE!
#########################

の文字が出てきたらコンテナ上にDBを作成することが成功している。

やったね!!

次回は、SQLDeveloperで作成したDBに接続する方法の記事書きます!

お見逃しなく〜