Oracle超初心者がmacで公式OracleDatabase19イメージをdocker-composeしてみた

#この記事の目的
テスト環境を作るために、localにOracleDataBase19を用意しなければならないことになって必死に調べたので、忘備録も兼ねて。不備などありましたらご指摘お願いします。

#環境
Mac OS Mojave(10.14.6)
Docker 19.03.4 
Oracle docker-images
Oracle Database 19.3

#流れ(記事内リンクあり)
[Dockerをインストール](#Dockerをインストール)
↓
[Oracle公式のdocker-imagesリポジトリを適当なディレクトリに設置](#Oracle公式のdocker-imagesリポジトリを適当なディレクトリに設置)
↓
[Oracle Databaseのzipをダウンロード](#Oracle Databaseのzipをダウンロード)
↓
[zipをdocker-imagesリポジトリ内適所に設置](#zipをdocker-imagesリポジトリ内適所に設置)
↓
[docker-imageをビルド](#docker-imageをビルド)
↓
[docker-compose.ymlを作成](#docker-compose.ymlを作成)
↓
[コンテナを作成](#コンテナを作成)
↓
[DB周りの設定](#DB周りの設定)

#Dockerをインストール
[公式](https://www.docker.com/)からインストール。dockerについて詳しくは[こちらの方](https://qiita.com/kotaro-dr/items/b1024c7d200a75b992fc)が詳しく説明してくださっています。

#Oracle公式のdocker-imagesリポジトリを適当なディレクトリに設置
[Oracle公式のdocker-imagesリポジトリ](https://github.com/oracle/docker-images)をクローンします。

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

このリポジトリに各バージョン(11gとか12cとか)用のdocker imageが入っているので、これを使ってローカルにdocker imageを作成していくことになります。

#Oracle Databaseのzipをダウンロード
Oracle Databaseの[ソフトウェアダウンロードページ](https://www.oracle.com/technetwork/jp/database/enterprise-edition/downloads/index.html)から、[Linux x86-64](https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html)版をzip形式でダウンロードします。
このとき、Oraleプロファイルへの登録を求められるので、未登録の場合は登録します。
safariで自動解凍されてしまう場合は、safari->環境設定->一般において、「ダウンロード後"安全"なファイルを開く」という項目からチェックを外しておく必要があります。

#zipをdocker-imagesリポジトリ内適所に設置
以前は docker-images/OracleDatabase/dockerfiles以下にバージョン名ディレクトリがあり、そこに設置していたようですが、記事作成現在はdocker-images/OracleDatabase/SingleInstance/dockerfiles以下のバージョン名ディレクトリ直下に設置するようになっています。
Downloadsディレクトリにダウンロードした場合は以下のようになります。(現時点での最新バージョンです)

```
$ cp /Users/[ユーザ名]/Downloads/LINUX.X64_193000_db_home.zip /[docker-imageを設置した場所]/docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0
```

#docker-imageをビルド

```
$ cd [docker-imageを設置した場所]/docker-images/OracleDatabase/SingleInstance/dockerfiles

$ ./buildDockerImage.sh -v 19.3.0 -e -i
```

ビルドのオプションは-hで確認できます。今回使用したオプションは、-vはバージョン指定、-eはEnterprise Editionであることの指定、-iはMD5チェックサムを無視することの指定です。
ビルドに時間がかかるのでしばらく待ちます。

以下のコマンドで作成されたイメージを確認できます。

```
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
oracle/database     19.3.0-ee           795668b74d8e        33 minutes ago      6.65GB
oraclelinux         7-slim              874477adb545        2 months ago        118MB
```
oracle/databaseというのがこのイメージの名称ですね。

#docker-compose.ymlを作成
dockerコンテナを作成したい場所(アプリケーションのdockerディレクトリなど)にdocker-compose.yml(コンテナの設計書のようなもの)を作成します。

```
$ vi docker-compose.yml
```

docker-compose.ymlの書き方は[こちらの方](https://qiita.com/koka/items/3d3d4ee5680f92a0ad89)などが書いてくださっています。

```docker-compose.yml
version: '2'
services:
  db:
    image: oracle/database:19.3.0-ee
    ports:
      - 1521:1521
      - 5500:5500
    volumes:
      - ./data:/opt/oracle/data
    environment:
      - ORACLE_PWD=password
      - ORACLE_PDB=pdb1
```

volumesに記載したdataディレクトリですが、こちらはデータマウント用に用意しておきます。こうすることで、コンテナを再度作成してもデータが消えません。また、こちらのマウントディレクトリ内から環境変数などを触ることもできる点も便利です。

#コンテナを作成
コンテナ立ち上げのコマンドは[こちらの方](https://qiita.com/nikadon/items/995c5705ff1171f7484d)などが書いてくださっています。
一応ですが、docker-composeコマンドが効くのはdocker-compose.ymlの直上のディレクトリです。

```
$ docker-compose up
```

私は個人的に、itermの画面分割で、左でupして右でexecするのが気に入っていますが、ひとまず今回は立ち上げるところまでにしておきます。

#おわりに
この後、Oracle DataBaseのインスタンスの概念やら、SpringBootのJDBCTemplateを使った接続やらでたくさん躓いたので、近いうちに別記事で書こうと思います。

#参考にさせていただいた記事など
https://qiita.com/comefigo/items/d05c0e1977cc25e6b98a
https://itedge.stars.ne.jp/docker_image_oracle_database_19c/
https://qiita.com/gorilla0513/items/f22e8cce4e08da031abe