検証用に素のWeblogic環境をDockerで立ち上げる方法(12.2.1)

WebLogic 12cの環境をとりあえず使ってみたい方向けに、2016年11月現在での方法を紹介します。こちらの記事は、12.2.1に対応しています。12.2.1.1以降は[こちら](http://qiita.com/makopo/items/c69de820b8bc378a1027)の記事をどうぞ。

ノード・マネージャを使えば、サーバーの起動停止は管理コンソールで実施できます。しかし、Oracle公式の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```と比較して確認

## 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. WebLogic管理サーバーの起動

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

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

## 6. ノード・マネージャが稼働するコンテナの起動

```
$ docker run -d --name machine1 --link wlsadmin:wlsadmin -p 7001:7001 1221-domain createMachine.sh
```

上記の場合、管理ポート7001で管理対象サーバーを作成すれば、Docker Machineのポート7001で、デプロイしたアプリにアクセスできるようになります。複数の管理対象サーバやポートを使用する予定の場合は、```-p 7001:7001 -p 7002:7002 -p 7003:7003```などと書きます。

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

```
$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                                                  NAMES
9e40f7eac343        1221-domain         "createMachine.sh"   7 seconds ago       Up 6 seconds        5556/tcp, 8001/tcp, 8453/tcp, 0.0.0.0:7001->7001/tcp   machine1
ad5cb331b0d4        1221-domain         "startWebLogic.sh"   27 seconds ago      Up 27 seconds       5556/tcp, 7001/tcp, 8453/tcp, 0.0.0.0:8001->8001/tcp   wlsadmin
```

## 7. 検証

### 管理コンソール

http://localhost:8001/console/

Docker Machine以外の環境からアクセスする場合は、localhostをDocker Machineのホスト名に置き換えてください。

開発モードとなっています。

ドメインに「Machine-コンテナID」という名前のマシンが作成されています。

「DockerCluster」という名前の空のクラスタが、必ず作成されます。現時点で、ソース変更以外に作成を回避する方法は見つかっていません。不要なら無視しましょう。

### コンソールアクセス

oracleユーザーでコンテナにログインして、WLSTなどのコマンドを検証できます。

```
$ docker exec -it wlsadmin bash
```

### ファイルをアップロード

Docker Machineからコンテナへ、WLSTスクリプトやバイナリなどをコピーできます。

```
$ docker cp /path_in_dockermachine/SomeFile.zip wlsadmin:/path_in_container/
```

### 再起動

WebLogicサーバーの再起動は、Dockerコンテナの再起動で実施します。

```
$ docker stop wlsadmin
$ docker start wlsadmin
```

## 8. 片付け

```
$ docker stop machine1 wlsadmin
$ docker rm machine1 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)