Docker版Oracle Database 12cを使ってみる

# 概要

　システム動作検証でOracleが必要だったので、Docker版Oracle Database 12c（12.2.0.1）のインストール手順を残したいと思います
手順としては「Dockerfileからビルドする方法」と「Oracleが提供しているDockerイメージサービスから導入する方法」の２つあります

# Dockerfile

## 前提条件

**ディスクの空き容量が15GB以上であること！**
ただし、Linux版Dockerが扱うディスクサイズ(basesize)の初期値が10GBになっているため、以下のようにdaemon.jsonで拡張する必要があります

**※定義後マシン再起動**

```json:/etc/docker/daemon.json
{
  "storage-opts": ["dm.basesize=20G"]
}
```

または、DockerのストレージドライバーをOverlay2に変更することでOSが認識しているディスク容量をすべて使用できるようになります

利用要件：

- [適切なファイルシステム](http://docs.docker.jp/engine/userguide/storagedriver/selectadriver.html)であること
- RHEL または CentOS のカーネルバージョンが3.10.0-514以上
- Linuxカーネルバージョンが4.0以上
- Docker Engine - Community, and Docker EE 17.06.02-ee5 以上


## 手順

1. [oracle/docker-images](https://github.com/oracle/docker-images)をローカルにcloneします
2. [OTN(Oracle Technology Network)](http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html)からOracle Database 12c Release 2(12.2.0.1)のインストーラを入手
3. 2で入手したインストーラをcloneしたリポジトリのOracleDatabase/SingleInstance/dockerfiles/12.2.0.1/に配置
4. 起動用の環境変数ファイル(oracle.env)をOracleDatabase/SingleInstance/dockerfiles/12.2.0.1/に作成
   ※SID、PDB、パスワードは適宜変更してください

    ```ini:oracle.env

    TZ=Asia/Tokyo
    ORACLE_SID=ORCL
    ORACLE_PDB=MYORCL
    ORACLE_PWD=oracle
    ORACLE_CHARACTERSET=AL32UTF8
    ```
5. イメージをビルド

    OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/配下で以下のコマンドでイメージのビルド
　　**※Dockerfile.se2をDockerfileにリネーム**

    ```
    > docker build -t oracle/database:12.2.0.1-se2 .
    ```

6. コンテナの起動

    Oracleのアップデートやらなんやらの処理がありますので、20分弱かかりました

    ```
    > docker run -d --env-file ./oracle.env -p 1521:1521 -p 5500:5500 -it --name my_oracle --shm-size="4g" oracle/database:12.2.0.1-se2
    ```


# Oracle Container Registry

初回起動時のデータインポート、リスナーが作られていない、データの永続化がないので、自分で設定しなければならないようです
イマイチ使い勝手悪い印象です
そもそもバージョンが古い

## 手順

1. [Oracle Container Registry](https://container-registry.oracle.com/)に登録する
2. Oracle恒例の使用許諾を乞う
    「Database」-「standard」の「Continue」を選択し、使用許諾を得てください
![ora-container-registry1.png](https://qiita-image-store.s3.amazonaws.com/0/30522/a2684eeb-c72b-eca3-36bd-cb9fa89b2b21.png)
![ora-container-registry2.png](https://qiita-image-store.s3.amazonaws.com/0/30522/b3e8100a-a6ca-a766-476d-4ebc9c7ba45a.png)

3. docker loginからoracle container registryにログインする
    **[ミラーサイト](https://docs.oracle.com/cd/E52668_01/E87205/html/oracle-registry-server-mirrors.html)の`container-registry-ash.oracle.com`がおすすめです(こっちのほうが早いです)**

    ```
    > docker login container-registry.oracle.com

    # 手順1で登録したユーザ名とパスワードを入力
    > Username: xxxxx@xxxxx
    > Password: xxxxxx
    ```
4. イメージをpullする
   イメージサイズがかなり大きいのと、USからpullするので時間がかかります
   

    ```
    > docker pull container-registry.oracle.com/database/standard
    ```
5. Oracle初期化用の環境変数ファイルを作成
   ※[Repository Detail](https://container-registry.oracle.com/pls/apex/f?p=113:4:113207474787173::NO::P4_REPOSITORY,AI_REPOSITORY,AI_REPOSITORY_NAME,P4_REPOSITORY_NAME:8,8,Oracle%20Database%20Standard%20Edition%202,Oracle%20Database%20Standard%20Edition%202&cs=3u9jqr-VYxIXqkvmWwdOEVQh6nYkR2eXGnLb2JH6rqdVVlwpPawzLPR0jkxiP6SAinjrhQ0kwYxXMjkOgfwKqZw)に書かれている内容です
    
    ```ini:common.env
    
    TZ=Asia/Tokyo
    DB_SID=OraDoc
    DB_PASSWD=MyPasswd123
    DB_DOMAIN=my.domain.com
    DB_BUNDLE=basic
    ```
6. コンテナの起動
   ※--shm-sizeは**最低4GB**を確保してください(推奨が8GB)
   ※ディスク容量は25GBを確保してください
    
    ```
    > docker run -d --env-file ./common.env -p 1521:1521 -p 5500:5500 -it --name myoracle --shm-size="8g" container-registry.oracle.com/database/standard
    ```    
    しばらくすると以下のように表示されれば、インストール完了です

    ```
    Done ! The database is ready for use .
    Wed Apr 11 23:45:06 JST 2018
    User check : root.
    Setup Oracle Database
    ```

    ※データを永続化したい場合は、コンテナ側の`/u02`ディレクトリとマウントしてください