Oracle on docker for Mac

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

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

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

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

<img width="1439" alt="スクリーンショット 2018-05-13 11.30.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/211395/d0d6775f-6b8c-5292-2f46-ed34ecee430b.png">

ダウンロードしてきた「Docker.dmg」を開き、
Applicationsに追加。
<img width="721" alt="スクリーンショット 2018-05-13 11.58.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/211395/2128c392-22d3-ccb9-e249-6957eab6e1df.png">

Applicationsにいるクジラさんをクリック。<img width="631" alt="スクリーンショット 2018-05-13 12.05.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/211395/82505dbb-3d8c-cbfd-6dbe-7d5a98cdde82.png">

インストーラーにしたがって、
インストール（画像撮り忘れた。。。）
すると、メニューバーにこいつが出てくる。<img width="1440" alt="スクリーンショット 2018-05-13 12.11.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/211395/7ddfd91e-64bb-eb97-575f-5b648bdca3f5.png">

こいつをクリックすると、
<img width="223" alt="スクリーンショット 2018-05-13 13.02.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/211395/69cb1207-cfe4-73a0-20c3-98dc90c4b1ce.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）をダウンロードしよう。
<img width="988" alt="スクリーンショット 2018-05-13 14.59.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/211395/0176e49d-c5fa-2826-6599-4e8db47029df.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に接続する方法の記事書きます！

お見逃しなく〜