単体でのWeblogicコンテナ構築　その１

Vagrant+AtomicHost上のDockerにWeblogicServerを構築します。

[前回「予告」として](http://qiita.com/zum/items/11ddf0df39877a26b5e6)下記を掲げましたが、せっかくなので連載的に進めていきたいなと思います。
改めて、やること。

1. 単体でのWeblogicコンテナ構築
1. １ホスト上に複数のWeblogicコンテナを構築
1. Kubernetesから複数ホスト上のWeblogicコンテナを配置（出来ればLBも）
1. コンテナやホストの監視（[参考](http://inokara.hateblo.jp/entry/2015/08/04/135820)）
1. Weblogicコンテナ全台のログを収集
1. 障害時の自動復旧
1. Private registoryを構築＆利用する
1. CI導入
1. ZDT（ゼロダウンタイム）でデプロイ
1. 性能検証など


# 単体でのWeblogicコンテナ構築　その１
さて、まずはOracleから提供されているこちらを参考にDocker上にWeblogicを立ち上げます。
基本的には[こちら](http://docs.oracle.com/middleware/1213/wls/DOCKR/configuration.htm#DOCKR121)で紹介されている通りに進めれば、特に問題もなくコンテナの作成、起動、Weblogic立ち上げまでは出来るかと思います。

では、順番に進めていきます。

## 必要なファイルを準備
Oracleから提供されているDockerfile、各種スクリプトはこちらから入手出来ます。
https://github.com/oracle/docker

ここにはWeblogicだけではなく、[Coherence](http://www.oracle.com/technetwork/jp/middleware/coherence/overview/index.html)のDockerfileも一緒に配布されています。
この連載（？）の中で、余裕があればCoherenceもDockerで構築してWeblogicと連携などさせてみたいですね。

まずはGitでCloneしましょう。

```
$ git clone https://github.com/oracle/docker.git
Cloning into 'docker'...
remote: Counting objects: 802, done.
remote: Total 802 (delta 0), reused 0 (delta 0), pack-reused 802
Receiving objects: 100% (802/802), 202.81 MiB | 351.00 KiB/s, done.
Resolving deltas: 100% (311/311), done.
Checking connectivity... done.
$ ls docker
MySQL		OracleCoherence	OracleWebLogic	README.md

```

次にWeblogicSeverのInstaller、JDKなど必要なファイルをOracleのサイトから取ってきます。
必要なファイルは、
docker/OracleWebLogic/dockerfiles/12.1.3
以下の*.downloadと書かれている以下のファイルです。
それぞれのファイルの取得先は\*.downloadファイルに記載されていますが、一応リンク貼っときます。

<dl>
<dt><a href="http://www.oracle.com/technetwork/middleware/weblogic/downloads/wls-for-dev-1703574.html">fmw_12.1.3.0.0_wls.jar</a></dt>
<dt><a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html">jdk-7u79-linux-x64.rpm</a></dt>
<dt><a href="http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html">wls1213_dev_update3.zip</a></dt>
</dl>

#### fmw_12.1.3.0.0_wls.jar

![スクリーンショット 2015-09-18 0.10.59.png](https://qiita-image-store.s3.amazonaws.com/0/93508/d8ac9bf2-66de-9920-97ce-0d145804de72.png)

Acceptをチェックして、
Installers with Oracle WebLogic Server and Oracle Coherence:
Generic (881 MB) 
をダウンロード。
※ログインしていない場合はログイン画面に遷移します。

#### jdk-7u79-linux-x64.rpm

![スクリーンショット 2015-09-18 0.16.17.png](https://qiita-image-store.s3.amazonaws.com/0/93508/932bd3d2-1453-9af3-7448-b89cea5110b7.png)

ちょっと下の方にjdk-7u79-linux-x64.rpmがあります。
バージョンが上がっていることがあるかと思いますが、スクリプトの中でChecksum をチェックしているので、Cloneした\*.downloadファイルの指示にしたがって、同じファイルをダウンロードします。

#### wls1213_dev_update3.zip

![スクリーンショット 2015-09-18 0.20.02.png](https://qiita-image-store.s3.amazonaws.com/0/93508/39243793-f684-17a6-c9de-d894acd18ef8.png)

「Accept License Agreement 」をチェックして、
「Free Oracle WebLogic Server 12c (12.1.3)  Zip Distribution and Installers for Developers」をダウンロードします。

fmw_12.1.3.0.0_wls.jar
jdk-7u79-linux-x64.rpm
wls1213_dev_update3.zip

取得したこれらのファイルは、\*.downloadと同じ場所に配置して下さい。
`docker/OracleWebLogic/dockerfiles/12.1.3/`

さて、これで準備完了です。

## ビルド
あとは、ビルド用のスクリプト「buildDockerImage.sh」を実行するだけです。
っとその前に、vagrantでAtomicHostを起動します。

```
$ vagrant up node01
```
Vagrantfileは[以前の投稿](http://qiita.com/zum/items/03da94291ffbc9af2244)で作成したように複数のAtomicHostを起動するようになっていますので、今回のように１つだけを起動したい場合は、引数に名前を指定します。

如何にVagrantfileの一部を抜粋します。

```lang:Vagrantfile
Vagrant.configure(2) do |config|
  config.vm.box = "atomic-centos"

  # 2台目 コンテナホスト（マシン名：node01）
  config.vm.define "node01" do |atomic|
     atomic.vm.hostname = "node01.atomichost"
     atomic.vm.synced_folder ".", "/vagrant", disabled: true
     atomic.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2223
     atomic.vm.network "private_network", ip: "192.168.33.101", virtualbox__intnet: "intra"
  end
end
```

Vagrantfileで指定しているようにPort2223でnode01のAtomicHostにSSHでログインします。
ログイン後、
```docker/OracleWebLogic/dockerfiles/12.1.3/```

```
[vagrant@node01 12.1.3]$ ls
Checksum.developer    fmw_12.1.3.0.0_wls.jar           jdk-7u79-linux-x64.rpm.download
Checksum.generic      fmw_12.1.3.0.0_wls.jar.download  oraInst.loc
Dockerfile.developer  install.file                     wls1213_dev_update3.zip
Dockerfile.generic    jdk-7u79-linux-x64.rpm           wls1213_dev_update3.zip.download
```

に移動し、ビルド用のスクリプトを起動。

```
$ cd ../
$ sh sudo buildDockerImage.sh -d
```
引数は、

```
   -d: creates image based on 'developer' distribution
   -g: creates image based on 'generic' distribution
```
-dは開発モード、-gは本番モード。
ご存じの方はご存知かと思いますが、ざっくり言うと開発モードはオンデマンドデプロイが有効になっていて、他にもデバック用の設定が各種施された状態です。

初めてなので、今回は開発モードでビルドします。
（最終的には本番モードに移行するつもり）

ちなみに、標準のAtomicHostではbuildDockerImage.shは失敗します。
容量が不足していて、rootが直ぐに100%になってしまいますので、[こちらの投稿](http://qiita.com/zum/items/cfe164ca983b1ff3f0a7)を参考に、rootのサイズを拡張しておいて下さい。

```
$ sudo ./buildDockerImage.sh -d
Checking if required packages are present and valid...
wls1213_dev_update3.zip: OK
jdk-7u79-linux-x64.rpm: OK
=====================
Building image 'oracle/weblogic:12.1.3-dev' based on 'developer' distribution...
Sending build context to Docker daemon 557.1 kBSending build context to Docker daemon 1.114 MBSending build context to Docker daemon 1.671 MBSending build context to 

-- 略 --

[==================================================>]     32 B/32 B8a2b759d9dd8: Pull complete docker.io/oraclelinux:7: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:ea26af4951ebef439db79e7388e8a023b29b1574e1b6a7a876ce8563d249130e
Status: Downloaded newer image for docker.io/oraclelinux:7
 ---> 8a2b759d9dd8
Step 1 : MAINTAINER Bruno Borges <bruno.borges@oracle.com>
 ---> Running in 88865e376c1a
 ---> 3f3125c7bb2a
```

ここで分かる通り、WeblogicServerのDockerはベースにoraclelinux7を使用します。
この辺りからは、Dockerfile内の処理になっています。
※Step 1 などの行

```
-- 続き --
Step 19 : CMD bash
 ---> Running in 54776bbf7922
 ---> 10969b1d78c8
Removing intermediate container 54776bbf7922
Successfully built 10969b1d78c8

WebLogic Docker Image for 'developer' 12.1.3 is ready to be extended: oracle/weblogic:12.1.3-dev
```

Step 19までがDockerfileの処理です。
`Successfully built 10969b1d78c8`
で、イメージID：10969b1d78c8のDockerイメージが生成されました。


```
$ sudo docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
oracle/weblogic         12.1.3-dev          10969b1d78c8        2 minutes ago       2.026 GB
docker.io/oraclelinux   7                   a8fd27de55f5        2 days ago          189.6 MB
```

次の場所に移動し、
docker-master/OracleWebLogic/samples/12c-domain
ビルド
`$sudo docker build -t samplewls:12.1.3 .`

```
 -- 略 --
Step 16 : CMD startWebLogic.sh
 ---> Running in b8de9045f001
 ---> 5636d10979e5
Removing intermediate container b8de9045f001
Successfully built 5636d10979e5
[vagrant@node01 12c-domain]$ sudo docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
samplewls               12.1.3              5636d10979e5        13 seconds ago      2.027 GB
oracle/weblogic         12.1.3-dev          10969b1d78c8        22 minutes ago      2.026 GB
docker.io/oraclelinux   7                   a8fd27de55f5        2 days ago          189.6 MB
oraclelinux             7.0                 5f1be1559ccf        10 months ago       265.2 MB
```

やっと「samplewls:12.1.3」と言うコンテナイメージが出来ました。
これを起動

```
$ sudo docker run -d -p 8001:8001 --name=wlsadmin samplewls:12.1.3
f454686e3fc78ac61001ebb70e5427838c43e0a425872ec4551918121e12ec16
$ sudo docker ps   
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                                        NAMES
f454686e3fc7        samplewls:12.1.3    "startWebLogic.sh"   5 seconds ago       Up 3 seconds        5556/tcp, 7001/tcp, 0.0.0.0:8001->8001/tcp   wlsadmin   
```

コンテナのIPアドレスを確認
```
$ sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' wlsadmin
172.17.0.11
```

## 起動
Vagrantのホスト機（MAC）からWeblogicServerの管理コンソールにアクセスするために、一旦AtomicHostからログアウトしてVagrant側にPortforwardを追加します。
WeblogicServerの管理コンソールはデフォルトで8001を開けているので、
docker run でも8001を開け、更にVagrant側もそのままスルーするように、

```
atomic.vm.network :forwarded_port,  guest: 8001, host: 8001
```
vagrantを再起動(reload）
一度AtomicHostを停止したので、コンテナを再起動

```
$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS                      PORTS               NAMES
f454686e3fc7        samplewls:12.1.3    "startWebLogic.sh"   3 minutes ago       Exited (0) 58 seconds ago                       wlsadmin            
$ sudo docker start f454686e3fc7    
f454686e3fc7
$ sudo docker ps   
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                                        NAMES
f454686e3fc7        samplewls:12.1.3    "startWebLogic.sh"   4 minutes ago       Up 5 seconds        5556/tcp, 7001/tcp, 0.0.0.0:8001->8001/tcp   wlsadmin  
```


vagrantを再起動(reload）したら、クライアント（MAC)から以下にアクセスしてみます。

http://localhost:8001/console

![スクリーンショット 2015-09-21 0.29.19.png](https://qiita-image-store.s3.amazonaws.com/0/93508/51abf287-306b-03f2-5b32-ee3af9013a38.png)

デフォルトのアカウントは
ユーザー名：weblogic
パスワード：welcome1

![スクリーンショット 2015-09-21 0.31.26.png](https://qiita-image-store.s3.amazonaws.com/0/93508/73a7ab2c-8246-1992-7e51-dae9f6805c77.png)

****

ここまで来るのに思いの外手間取りました。。。。
次回はWeblogicのドメイン周りの設定をスクリプトを利用して実施してみます。
その後、実際に本番環境での利用が出来るようにスクリプトなどを読み解き、独自設定を施していきたいと思います。