WebアプリをデプロイしたWebLogicのDockerイメージを簡単に作成する方法

前提：
* GitとDockerが使える環境が既にある
* LinuxかMacを使っている (Windowsの場合は、適宜読み替えができる)

参考：
https://github.com/oracle/docker-images/tree/master/OracleWebLogic
の中の各種READMEなど

## 1. 必要なものをダウンロード・用意

Oracle社公式のDockerイメージ

```
$ git clone --depth 1 https://github.com/oracle/docker-images
$ export WLS_DOCKER_DIR=`pwd`/docker-images
```
以下、```docker-images/```のパスを```$WLS_DOCKER_DIR```と表記します。

Java 8

 - [JavaのOTNサイト](http://www.oracle.com/technetwork/java/javase/downloads/server-jre8-downloads-2133154.html)にて、利用許諾確認してダウンロード
 - Linux x64版のJava8(マイナーバージョンは不問)
 - ```$WLS_DOCKER_DIR/OracleJava/java-8```に配置

WebLogic

 - [WebLogicのOTNサイト](http://www.oracle.com/technetwork/middleware/weblogic/downloads/wls-for-dev-1703574.html)にて、利用許諾確認してLinux x64版をダウンロード
 - **12.2.1**の**Quick Installer for Mac OSX, Windows and Linux**
 - ```$WLS_DOCKER_DIR/OracleWebLogic/dockerfiles/12.2.1```に配置
 - MD5チェックサムを、上記ディレクトリ内の```*.download```と比較して確認

Webアプリケーション

 - 起動時にデプロイしたいwarファイルを用意
    - 無ければ以下の手順は不要。デフォルトのsample.warがデプロイされる
 - ```$WLS_DOCKER_DIR/OracleWebLogic/samples/1221-appdeploy/container-scripts```に配置
 - ```sample.war```以外のファイル名の場合は、```1221-appdeploy```内の```Dockerfile```を編集

```Dockerfile:Dockerfile
ENV APP_NAME="yourapp" \
    APP_PKG_FILE="yourapp.war" \
    APP_PKG_LOCATION="/u01/oracle"
```

## 2. Java Dockerイメージのビルド

```
$ cd $WLS_DOCKER_DIR/OracleJava/java-8
$ sh build.sh
...
Successfully built 4f40dfabddcf
```

## 3. WebLogic Dockerイメージのビルド

```
$ cd $WLS_DOCKER_DIR/OracleWebLogic/dockerfiles
$ sh buildDockerImage.sh -v 12.2.1 -d -s
...
Successfully built 0babafe5a6e3

  WebLogic Docker Image for 'developer' version 12.2.1 is ready to be extended: 
    
    --> oracle/weblogic:12.2.1-developer

  Build completed in 313 seconds.
```

「md5sum」がない環境でも実行できるよう、```-s```をつけてチェックサム比較処理を回避しています。


## 4. ドメイン作成処理を追加したイメージのビルド

[1221-domain](https://github.com/oracle/docker-images/tree/master/OracleWebLogic/samples/1221-domain)を使います。

```
$ cd $WLS_DOCKER_DIR/OracleWebLogic/samples/1221-domain
$ docker build -t 1221-domain --build-arg ADMIN_PASSWORD=Welcome1 .
...
Successfully built fe9f79ebf038
```

## 5. アプリ配備処理を追加したイメージのビルド

[1221-appdeploy](https://github.com/oracle/docker-images/tree/master/OracleWebLogic/samples/1221-appdeploy)を使います。

```
$ cd $WLS_DOCKER_DIR/OracleWebLogic/samples/1221-appdeploy
$ docker build -t 1221-appdeploy .
...
Successfully built 494b3094399f
```

## 6. WebLogicサーバーの起動

```
$ docker run -d --name=wlsadmin -p 8001:8001 1221-appdeploy
```

管理サーバーの管理ポートが8001のため、Docker Machineのポート8001で、管理コンソールなどにアクセスできるようにしています。

起動したコンテナの状態を確認します。

```
$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                                                  NAMES
b996bbfa077e        1221-appdeploy      "startWebLogic.sh"   8 seconds ago       Up 7 seconds        5556/tcp, 7001/tcp, 8453/tcp, 0.0.0.0:8001->8001/tcp   wlsadmin
```

## 7. WebLogic管理コンソールやサンプルへのアクセス

管理コンソール
http://localhost:8001/console (weblogic/Welcome1でログイン)
サンプル
http://localhost:8001/sample (warファイルを入れ替えていない場合)

## 8. 片付け

```
$ docker stop wlsadmin
$ docker rm wlsadmin
```


## 注意点

Oracle製品をプロジェクトに含んだ状態でDockerイメージを公開すると、利用許諾違反となります。また、利用許諾承認プロセスが組み込めないため、DockerHubにWebLogicのビルド済みイメージが公開される可能性は無いようです。[レジストリサーバーを立てて、そこにビルド済みイメージを置いてDev/Ops間で共有するのは良いようです](https://github.com/oracle/docker-images/issues/109#issuecomment-227547774)。

参考：
[There should be official Versions of Weblogic on DockerHub. #13](https://github.com/oracle/docker-images/issues/13)
[Put this on docker hub #109](https://github.com/oracle/docker-images/issues/109)