Dockerで実践！ WebLogic Server 12.2.1のマルチテナントのサンプル環境を簡単に作成する

#はじめに
GitHubのページ[https://github.com/oracle/docker-images/tree/master/OracleWebLogic](https://github.com/oracle/docker-images/tree/master/OracleWebLogic) のDockerスクリプトを利用すると、Dockerを使ってで簡単に最新のWebLogic Server 12.2.1を動かすことができます。目玉の新機能マルチテナントを体験するのにとても便利です。
このGitHubコンテンツのReadMeを参照しながら使うのが基本ですが、より実践しやくするために利用例を紹介します。
Docker自体の解説は必要最小限にしています。

\# 2016/04/06 最後の方のマルチテナント上のMedrecにアクセスする際のやり方を訂正しました。

# 目次
1. Dockerのインストール
2. Dockerコンテナ上でWebLogic Server 12.2.1をインストールして、baseドメインを動かす
3. Dockerコンテナ上でマルチテナントのMedrecドメインを動かす



# Dockerのインストール
今回はDocker Toolbox を使ってWindowsにインストールするやり方で行います。

現時点最新のDocker 1.10をインストールします。
[Docker Toolboxダウンロードサイト](https://www.docker.com/products/docker-toolbox)
※執筆時ではDockerToolbox-1.10.3.exeをダウンロードして利用しました。

インストールのためのシステム要件は、Docker公式サイトの[インストール手順](https://docs.docker.com/engine/installation/windows/)を参考にしてください。
手順も上記にありますが、基本的にはインストールexeをクリックして進めるだけで簡単なものになっています。



自分は社内プロキシ配下の環境からこのexeを実行したところ、起動時にexeがハングしてしまいました。何やらこのexe起動時に外へ通信しに行っているようで、ここで通信を待ってしまっていました。ネットワーク通信をオフにしたところ進むようになりました。それ以降のウィザードを進める上では再びネットワークをつないでも問題ありませんでした。



## Docker Toolboxインストール後の状態![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/789b4385-0786-c0e1-77de-c35aadde43d4.png)

インストールが終わったらDocker Quickstart Terminalのアイコンを実行してみましょう。MINGW64のターミナルが起動して、初回起動時はまずインストールexe実行時に解凍されたBoot2Docker ISOを元にVirtualBox内にdefaultという名前のBoot2Docker Linux VMが作成されて、起動されます。このVMのことを以降Dockerホストという名前で参照します。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/71f4bae7-0942-9434-905c-61273b613a9c.png)

ここで表示される上の赤枠のIPアドレスは後で使用するのでメモしておきましょう。

dockerのバージョンを確認しておきます。

```
$ docker -v
Docker version 1.10.3, build 20f81dd
```

もし古いDockerが入ったままの環境の場合、dockerがアップデートされないようなので、dockerをアンインストール後に再度インストールした方がよさそうです。

## Dockerの基本的な動作確認
以下の`docker run hello-world`コマンドの出力が出れば動作はＯＫです。

```
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
03f4658f8b78: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7
Status: Downloaded newer image for hello-world:latest

Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/userguide/
```

もし社内プロキシ配下から実行した場合、おそらく以下のような出力になります。

```
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
Pulling repository docker.io/library/hello-world
docker: Network timed out while trying to connect to https://index.docker.io/v1/repositories/library
/hello-world/images. You may want to check your internet connection or if you are behind a proxy..
See 'C:\Program Files\Docker Toolbox\docker.exe run --help'.
```

この場合、下のプロキシの設定が必要となります。（該当しない場合に[次](#dockerコンテナ上でweblogic-server-1221をインストールしてbaseドメインを動かす)へ飛んでください）

## dockerホストのプロキシ設定
dockerホストの中の/var/lib/boot2docker/profileというファイルに対してプロキシの設定を入れます。（プロキシホスト:ポート　のところは置き換えてください）

```
$ docker-machine.exe ssh
docker@default:~$ sudo su -
root@default:~# echo "export HTTP_PROXY=http://プロキシホスト:ポート" >> /var/lib/boot2docker/profile
root@default:~# echo "export HTTPS_PROXY=http://プロキシホスト:ポート" >> /var/lib/boot2docker/profile
root@default:~# cat /var/lib/boot2docker/profile

EXTRA_ARGS='
--label provider=virtualbox

'
CACERT=/var/lib/boot2docker/ca.pem
DOCKER_HOST='-H tcp://0.0.0.0:2376'
DOCKER_STORAGE=aufs
DOCKER_TLS=auto
SERVERKEY=/var/lib/boot2docker/server-key.pem
SERVERCERT=/var/lib/boot2docker/server.pem


export HTTP_PROXY=http://プロキシホスト:ポート
export HTTPS_PROXY=http://プロキシホスト:ポート
```

設定ができたら、反映するためにログアウトして、dockerホストを再起動します。

```
root@default:~# exit
docker@default:~$ exit

$ docker-machine.exe restart
Restarting "default"...
Waiting for SSH to be available...
Detecting the provisioner...
Restarted machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
```

この後、`docker run hello-world`を実行できることを確認してください。

# Dockerコンテナ上でWebLogic Server 12.2.1をインストールして、baseドメインを動かす

## WebLogicインストール用のDockerスクリプトのダウンロード

こちらの[GitHubサイト](https://github.com/oracle/docker-images/)からDockerのスクリプトをダウンロードして、任意のフォルダに展開します。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/91848e21-916f-be43-c49e-a90518ec8200.png)

Gitに慣れていない方はZIPとしてダウンロードすればＯＫです。
ZIP形式を解凍すると、docker-images-masterというフォルダができると思います。
ここからの手順では、自分が試したときの展開フォルダ「D:\wls1221docker\docker-images-master」を例に記載しますが、このパスはご自身の環境のパスに置き換えてください。


### WebLogicとJavaのインストールバイナリのダウンロード
WebLogicやJavaのインストーラーは手動でオラクルの製品ダウンロードサイトからダウンロードしなければいけません。

各サイトのOTN Free Developer License Agreementライセンスを許諾し、以下の3つのバイナリをダウンロードしてください。

1つ目のインストーラー
[WebLogic Server 12.2.1 Quick Installer for Developers](http://www.oracle.com/technetwork/middleware/fusion-middleware/downloads/index.html)
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/519b6a0c-a5bf-2ea8-075e-741e503f085d.png)

2つ目のインストーラー
[WebLogic Server 12.2.1 Supplemental Quick Installer](http://www.oracle.com/technetwork/middleware/weblogic/downloads/wls-for-dev-1703574.html)
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/321e55c4-e32a-6abc-52ec-c867925c0971.png)

3つ目のインストーラー
[Java JRE 8u77 Linux x64](http://www.oracle.com/technetwork/java/javase/downloads/server-jre8-downloads-2133154.html)
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/f8aa1d67-25b0-8a73-adcf-31eee520c270.png)
※執筆時はJREは8u77のバージョンでしたが、将来的にGitHubのスクリプト内で指定されるJREのバージョンが更新される可能性がありますので、実施前に以下のサイトで利用バージョンを確認ください。
https://github.com/oracle/docker-images/tree/master/OracleWebLogic/dockerfiles/12.2.1
上記ページの中に「server-jre-8uXX-linux-x64.tar.gz.download」のようなファイルがあると思いますが、そのファイルが示すJREバージョンをダウンロードしてください。

### ダウンロードしたインストールバイナリの配置先
正しいフォルダにインストールバイナリを配置しておく必要があります。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/73e65699-82e7-cec9-0ffc-3707472a2b8f.png)

## WebLogic Server 12.2.1 baseドメインのDocker イメージを作成
まずは、マルチテナントではない、シンプルなWebLogicサーバーのドメインを作成してみます。

- デスクトップアイコンDocker Quick Start Terminalを実行し、ターミナルに入ります。

- DockerスクリプトbuildDockerImage.sh があるフォルダに移動します。
`cd "D:\wls1221docker\docker-images-master\OracleWebLogic\dockerfiles"`
※D:\wls1221docker\docker-images-masterは自分の環境のパスに置き換えてください。

- buildDockerImage.shを実行します。

```
$ sh buildDockerImage.sh -v 12.2.1 -d
Checking if required packages are present and valid...
fmw_12.2.1.0.0_wls_quick_Disk1_1of1.zip: OK
server-jre-8u77-linux-x64.tar.gz: OK
=====================
Building image 'oracle/weblogic:12.2.1-developer' ...
ffe36b360c6d: Pull complete
Digest: sha256:43e43dbbb960b1658a3514342e52dd4ff01e5195cddb6f05b23af273caf07135
Status: Downloaded newer image for oraclelinux:latest
 ---> adf2d3d00fce complete
Step 2 : MAINTAINER Bruno Borges <bruno.borges@oracle.com>
 ---> Running in 0d085cee5681
 ---> 15b7a2b25cf4
Removing intermediate container 0d085cee5681
Step 3 : ENV JAVA_PKG server-jre-8u*-linux-x64.tar.gz JAVA_HOME /usr/java/default FMW_PKG fmw_12.2.1
.0.0_wls_quick_Disk1_1of1.zip FMW_JAR fmw_12.2.1.0.0_wls_quick.jar ORACLE_HOME /u01/oracle USER_MEM_
ARGS "-Djava.security.egd=file:/dev/./urandom" PATH $PATH:$JAVA_HOME/bin:$ORACLE_HOME/oracle_common/
common/bin
 ---> Running in 44605046f8c0
 ---> b4ce67a355ce
Removing intermediate container 44605046f8c0
Step 4 : COPY $FMW_PKG install.file oraInst.loc /u01/
 ---> c0a5b4c37b8a
Removing intermediate container 09a146821e6b
Step 5 : ADD $JAVA_PKG /usr/java/
 ---> 4f88f2c74f00
Removing intermediate container 32cf2d4d1e3d
Step 6 : RUN chmod a+xr /u01 &&     useradd -b /u01 -m -s /bin/bash oracle &&     echo oracle:oracle
 | chpasswd &&     ln -s $(ls -1 /usr/java) $JAVA_HOME &&     cd /u01 && $JAVA_HOME/bin/jar xf /u01/
$FMW_PKG && cd - &&     su -c "$JAVA_HOME/bin/java -jar /u01/$FMW_JAR -invPtrLoc /u01/oraInst.loc -j
reLoc $JAVA_HOME -ignoreSysPrereqs -force -novalidation ORACLE_HOME=$ORACLE_HOME" - oracle &&     ch
own oracle:oracle -R /u01 &&     rm /u01/$FMW_JAR /u01/$FMW_PKG /u01/oraInst.loc /u01/install.file
 ---> Running in 5c974481281b
/
Launcher log file is /tmp/OraInstall2016-03-30_07-03-12AM/launcher2016-03-30_07-03-12AM.log.
Extracting files.....
Starting Oracle Universal Installer

Checking if CPU speed is above 300 MHz.   Actual 2494.234 MHz    Passed
Checking swap space: must be greater than 512 MB.   Actual 1167 MB    Passed
Checking if this platform requires a 64-bit JVM.   Actual 64    Passed (64-bit not required)
Checking temp space: must be greater than 300 MB.   Actual 16316 MB    Passed


Preparing to launch the Oracle Universal Installer from /tmp/OraInstall2016-03-30_07-03-12AM
Log: /tmp/OraInstall2016-03-30_07-03-12AM/install2016-03-30_07-03-12AM.log
Setting ORACLE_HOME to /u01/oracle

*****************************************************


Distribution Name : Oracle Fusion Middleware 12c WebLogic and Coherence Developer
Distribution Version : 12.2.1.0.0

Oracle Inventory : /u01/oracle/.inventory

Oracle Home : /u01/oracle
Java Home : /usr/java/jdk1.8.0_77

*****************************************************

Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
Skipping Software Updates
Validations are enabled for this session.
Verifying data
Copying Files
Percent Complete : 10
Percent Complete : 20
Percent Complete : 30
Percent Complete : 40
Percent Complete : 50
Percent Complete : 60
Percent Complete : 70
Percent Complete : 80
Percent Complete : 90
Percent Complete : 100

The installation of Oracle Fusion Middleware 12c WebLogic and Coherence Developer 12.2.1.0.0 complet
ed successfully.
Logs successfully copied to /u01/oracle/cfgtoollogs/oui.
 ---> e2bf20fce045
Removing intermediate container 5c974481281b
Step 7 : USER oracle
 ---> Running in 4675eedb992a
 ---> 3c3f090a4fda
Removing intermediate container 4675eedb992a
Step 8 : WORKDIR $ORACLE_HOME
 ---> Running in 5634189efcdf
 ---> 318dd7100d11
Removing intermediate container 5634189efcdf
Step 9 : CMD bash
 ---> Running in 5d79dd8b7931
 ---> 11a3cc7a4a08
Removing intermediate container 5d79dd8b7931
Successfully built 11a3cc7a4a08
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. Al
l files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended
 to double check and reset permissions for sensitive files and directories.

  WebLogic Docker Image for 'developer' version 12.2.1 is ready to be extended:

    --> oracle/weblogic:12.2.1-developer

  Build completed in 428 seconds.

```

画面にあるように、先に配置したWebLogicのインストーラーとJREのインストーラーをDockerコンテナにコピーしてDockerイメージがビルドされています。

- samples\1221-domainフォルダに移動します。
`cd ../samples/1221-domain/`

- 以下のdocker buildコマンドを実行します。パスワードは任意に変更してください。
`docker build -t 1221-domain --build-arg ADMIN_PASSWORD=my-password .`

```:出力例
Sending build context to Docker daemon 20.99 kB
Step 1 : FROM oracle/weblogic:12.2.1-developer
 ---> 11a3cc7a4a08
Step 2 : MAINTAINER Bruno Borges <bruno.borges@oracle.com>
 ---> Running in ed6bc5628c9c
 ---> ae68bb5015b6
Removing intermediate container ed6bc5628c9c
Step 3 : ARG ADMIN_PASSWORD
 ---> Running in ca6fc930a36f
 ---> 97301da6a75a
Removing intermediate container ca6fc930a36f
Step 4 : ENV DOMAIN_NAME "base_domain" ADMIN_PASSWORD "$ADMIN_PASSWORD" ADMIN_PORT "8001" ADMIN_HOST
 "wlsadmin" NM_PORT "5556" MS_PORT "7001" CLUSTER_NAME "DockerCluster" PATH $PATH:/u01/oracle/wlserv
er/common/bin:/u01/oracle/user_projects/domains/base_domain/bin:/u01/oracle
 ---> Running in 4e7e368232c0
 ---> 3ae43be5b811
Removing intermediate container 4e7e368232c0
Step 5 : USER oracle
 ---> Running in 04562739eaa2
 ---> 97627bc75ac1
Removing intermediate container 04562739eaa2
Step 6 : COPY container-scripts/* /u01/oracle/
 ---> f23fcb76ff8a
Removing intermediate container 1abd4b9cf01c
Step 7 : RUN /u01/oracle/oracle_common/common/bin/wlst.sh -skipWLSModuleScanning /u01/oracle/create-
wls-domain.py &&     mkdir -p /u01/oracle/user_projects/domains/base_domain/servers/AdminServer/secu
rity &&     echo "username=weblogic" > /u01/oracle/user_projects/domains/base_domain/servers/AdminSe
rver/security/boot.properties &&     echo "password=$ADMIN_PASSWORD" >> /u01/oracle/user_projects/do
mains/base_domain/servers/AdminServer/security/boot.properties &&     echo ". /u01/oracle/user_proje
cts/domains/base_domain/bin/setDomainEnv.sh" >> /u01/oracle/.bashrc &&     echo "export PATH=$PATH:/
u01/oracle/wlserver/common/bin:/u01/oracle/user_projects/domains/base_domain/bin" >> /u01/oracle/.ba
shrc
 ---> Running in 7ddf4563231e

Initializing WebLogic Scripting Tool (WLST) ...

Welcome to WebLogic Server Administration Scripting Shell
Type help() for help on available commands



Exiting WebLogic Scripting Tool.

 ---> fba8086a13b1
Removing intermediate container 7ddf4563231e
Step 8 : EXPOSE $NM_PORT $ADMIN_PORT $MS_PORT
 ---> Running in 995a19c90f41
 ---> 647093fa4cc2
Removing intermediate container 995a19c90f41
Step 9 : WORKDIR /u01/oracle
 ---> Running in af3fa3c63954
 ---> 72eabf578e30
Removing intermediate container af3fa3c63954
Step 10 : CMD startWebLogic.sh
 ---> Running in 28528b821b21
 ---> 0dfe2273cac2
Removing intermediate container 28528b821b21
Successfully built 0dfe2273cac2
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. Al
l files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended
 to double check and reset permissions for sensitive files and directories.
```


- `docker images`で作成されたイメージを確認します。1221-domainというイメージができています。

```
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
1221-domain         latest              0dfe2273cac2        2 minutes ago       1.161 GB
oracle/weblogic     12.2.1-developer    11a3cc7a4a08        39 minutes ago      1.16 GB
oraclelinux         latest              adf2d3d00fce        3 weeks ago         205.9 MB
```

- 以下のコマンドでDockerホストに入ります。
`docker-machine.exe ssh`

- 以下のdocker runコマンドで管理サーバーを起動します。
`docker@default:~$ docker run -ti -v /dev/urandom:/dev/random -p 8001:8001 1221-domain`
\-it: フォアグランドで実行するためのオプション。バックグラウンド実行したい場合は代わりに-dを使います。
\-v: マウント（理由は後述）
\-p: バインドするポート

以下のようにRUNNINGになったらWebLogicの起動が完了してますので、次の手順へ移ってください。

```
<Mar 30, 2016 7:50:27 AM UTC> <Notice> <Server> <BEA-002613> <Channel "Default" is now listening on
172.17.0.2:8001 for protocols iiop, t3, ldap, snmp, http.>
<Mar 30, 2016 7:50:27 AM UTC> <Notice> <Server> <BEA-002613> <Channel "Default[2]" is now listening
on 127.0.0.1:8001 for protocols iiop, t3, ldap, snmp, http.>
<Mar 30, 2016 7:50:27 AM UTC> <Notice> <Server> <BEA-002613> <Channel "Default[1]" is now listening
on 0:0:0:0:0:0:0:1%lo:8001 for protocols iiop, t3, ldap, snmp, http.>
<Mar 30, 2016 7:50:27 AM UTC> <Notice> <WebLogicServer> <BEA-000360> <The server started in RUNNING
mode.>
<Mar 30, 2016 7:50:27 AM UTC> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNIN
G.>
```

補足：上のコマンドは普通はdockerホストにsshで入らずにWindowsのターミナルのDockerクライアントから直接docker run で実行できるのですが、WebLogicサーバーが起動するときに発生する乱数生成の部分で止まるケースがあるため、Dockerコンテナ上の/dev/randomをDockerホストの/dev/urandomとしてマウントするオプション`-v /dev/urandom:/dev/random`を追加しました。このオプションをつけるために今回はsshでDockerホストにログインしてからdocker runを実行しています。

- Windows上のブラウザからWebLogicの管理コンソールにアクセスしてみます。URLは`http://192.168.99.100:8001/console`となりますが、このURLのIPアドレスは、Docker terminal起動時に最初に表示されたIPを入れてください。例：「docker is configured to use the default machine with IP 192.168.99.100」

ログインするユーザーは「weblogic」、パスワードは上で指定したもの（my-password)です。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/c997ffe5-e0a9-c822-5755-ede22b509744.png)

## コンテナの停止と起動の仕方

停止したい場合、ターミナル上でCtrl-CしてWebLogicを停止してください。
再び起動したい場合は、`docker ps -a`でCONTAINER IDを確認して、`docker start`します。

```
docker@default:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS
         PORTS               NAMES
4c6d05b132cf        1221-domain         "startWebLogic.sh"   2 minutes ago       Exited (0) 5 second
s ago                        thirsty_poitras
9b894697f22c        hello-world         "/hello"             15 minutes ago      Exited (0) 15 minut
es ago                       tender_lumiere

docker@default:~$ docker start 4c6d05b132cf
4c6d05b132cf

docker@default:~$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS
 PORTS                                        NAMES
4c6d05b132cf        1221-domain         "startWebLogic.sh"   12 minutes ago      Up 8 seconds
 5556/tcp, 7001/tcp, 0.0.0.0:8001->8001/tcp   thirsty_poitras
```

上記docker startではバックグランドで実行となるため、例えばWebLogicのログとかを確認する場合は以下のように`docker exec <コンテナID> bash`を実行すれば、Dockerコンテナに入れます。

```
docker@default:~$ docker exec -it 4c6d05b132cf bash
[oracle@4c6d05b132cf base_domain]$ pwd
/u01/oracle/user_projects/domains/base_domain

[oracle@4c6d05b132cf base_domain]$ cd servers/AdminServer/logs/

[oracle@4c6d05b132cf logs]$ ls
AdminServer.log  access.log  base_domain.log  diagnostic_images  jmsservers
```

最後に、またこれを止めたい場合はこうします。

```
[oracle@4c6d05b132cf logs]$ exit

docker@default:~$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS
 PORTS                                        NAMES
4c6d05b132cf        1221-domain         "startWebLogic.sh"   17 minutes ago      Up 4 minutes
 5556/tcp, 7001/tcp, 0.0.0.0:8001->8001/tcp   thirsty_poitras


docker@default:~$ docker stop 4c6d05b132cf
4c6d05b132cf

docker@default:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS
PORTS               NAMES

```

# Dockerコンテナ上でマルチテナントのMedrecドメインを動かす
## マルチテナントドメイン用のDockerコンテナを作成する

- 作成されたデスクトップアイコンDocker Quick Start Terminalを実行し、ターミナルに入ります。
- samples\1221-domainフォルダに移動します。
`cd "D:\wls1221docker\docker-images-master\OracleWebLogic\samples\1221-medrec"`
※D:\wls1221docker\docker-images-masterは自分の環境のパスに置き換えてください。

- 以下のdocker buildコマンドを実行します。（baseドメインのときのADMIN_PASSWORDオプションは使えません。パスワードはwelcome1固定です）
`docker build -t 1221-medrec .`

```:出力例
Sending build context to Docker daemon 234.5 MB
Step 1 : FROM oracle/weblogic:12.2.1-developer
 ---> 11a3cc7a4a08
Step 2 : MAINTAINER Monica Riccelli <monica.riccelli@oracle.com>
 ---> Using cache
 ---> 1c7c74b36815
Step 3 : ENV FMW_PKG "fmw_12.2.1.0.0_wls_supplemental_quick_Disk1_1of1.zip" MW_HOME "$ORACLE_HOME" A
NT_OPTIONS "-Djava.security.egd=file:/dev/./urandom -Xms512m -Xmx1024m -XX:MaxPermSize=2048m" EXAMPL
ES_HOME "/u01/oracle/wlserver/samples/server" CLASSPATH "$JAVA_HOME/lib/tools.jar:$ORACLE_HOME/wlser
ver/modules/features/wlst.wls.classpath.jar" PATH "$ORACLE_HOME/wlserver/server/bin:$ORACLE_HOME/wls
erver/../oracle_common/modules/org.apache.ant_1.9.2/bin:$JAVA_HOME/jre/bin:$JAVA_HOME/bin:/usr/local
/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$ORACLE_HOME/oracle_common/common/bin:$ORACLE_HOM
E/wlserver/common/bin:$ORACLE_HOME/user_projects/domains/medrec/bin:$ORACLE_HOME/wlserver/samples/se
rver/medrec/:$ORACLE_HOME/wlserver/../oracle_common/modules/org.apache.maven_3.2.5/bin"
 ---> Using cache
 ---> 10528cc3c688
Step 4 : COPY $FMW_PKG weblogic.properties startSample.sh ./
 ---> Using cache
 ---> 574d95e0b3cc
Step 5 : RUN jar xvf $FMW_PKG &&     java -jar $(ls -1 *.jar) ORACLE_HOME=$ORACLE_HOME &&     mkdir
-p /u01/oracle/wlserver/samples/server/medrec/ &&     mv weblogic.properties startSample.sh /u01/ora
cle/wlserver/samples/server/medrec/ &&     rm $FMW_PKG $(ls -1 *.jar)
 ---> Using cache
 ---> 9b7ad2048918
Step 6 : WORKDIR $ORACLE_HOME/wlserver/samples/server/medrec
 ---> Using cache
 ---> a8e4452e5e68
Step 7 : ENTRYPOINT ./startSample.sh
 ---> Using cache
 ---> 34bb81f7b574
Step 8 : EXPOSE 7001
 ---> Using cache
 ---> d5a3646666d6
Step 9 : CMD single.server.sample
 ---> Using cache
 ---> 811576a43d21
Successfully built 811576a43d21
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. Al
l files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended
 to double check and reset permissions for sensitive files and directories.
```

- 作成されたイメージを確認します。1221-medrecというのが作成されています。

```
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
1221-medrec         latest              811576a43d21        About a minute ago   1.604 GB
1221-domain         latest              0dfe2273cac2        20 minutes ago       1.161 GB
oracle/weblogic     12.2.1-developer    11a3cc7a4a08        57 minutes ago       1.16 GB
oraclelinux         latest              adf2d3d00fce        3 weeks ago          205.9 MB
```

- 以下のコマンドでDockerホストに入ります。
`docker-machine.exe ssh`

- 以下のdocker runコマンドで管理サーバーを起動します。中でマルチテナントの構成が行われるので、自分の環境の場合は完了まで8分かかりました。
`docker run -ti -v /dev/urandom:/dev/random -p 7001:7001 1221-medrec mt.single.server.sample`

- Windows上のブラウザから管理コンソールにアクセスします。今回のURLは前回とはポートが違い、`http://192.168.99.100:7001/console`　となりますが、IPアドレスはbaseドメインのときと同じく自分のDockerホストの環境のものに置き換えてください。
ユーザー・パスワードはweblogic/welcome1です。

WebLogicの管理コンソールにログイン後、「ドメイン・パーティション」のリンクをクリックすると、テナントであるパーティションが３つ稼働していることが確認できます。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/2d653946-4e01-9330-c1ca-ab5996c9eb77.png)

## テナント上のアプリケーションにアクセス
各パーティションがRUNNINGであることを確認してください。パーティションがなかったり、数が1つとか2つとかの場合、まだ裏で構成中かもしれませんので、しばらく待ちましょう。

次に「仮想ターゲット」のリンクをクリックしてください。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/aa30b365-d064-f627-e0a4-9986a9d3e8ab.png)
各テナントへWebアクセスするための定義がこの仮想ターゲットです。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/7cdaa2c1-94ea-4071-40bc-fc53399cd46f.png)

テナント上で動いているMedrecアプリケーションにアクセスするためにはここにあるホスト名を使ってブラウザのアドレスバーに入れる必要があります。このDocker コンテナにアクセスするにはいままでIPアドレス（例：192.168.99.100）を使ってきたので、このままではMedrecアプリケーションにアクセスできません。
今回の環境の場合、以下の3つの対処法があります。

- 方法1: IPアドレスでアクセスする場合、仮想ターゲットのホスト名にこのIPを追加
- 方法2: localhostでアクセスできるようにする。そのためにVirtualboxのポートフォワードを設定し、Windowsからlocalhost:<ポート>の通信がDockerマシンへルーティングされるようにする。
- 方法3: baylandurgentcare.comなどの指定されているホスト名でアクセスする場合、このホスト名がDocker VMのIPアドレスに名前解決されるように設定。（Windowsのhostsファイルの設定で可能）

方法1を今回紹介します。

仮想ターゲットの画面から設定変更したい仮想ターゲットの名前をクリックします。そして以下のようにホスト名の欄にIPアドレスを入力し、保存ボタンを押します。
これを各仮想ターゲットに対して行ってください。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/73ae79b9-2398-6ccc-24bb-c040c1262c0c.png)

仮想ターゲットの設定を反映するには、ドメインパーティションの再起動が必要です。チェンジ・センターのリンクをクリックします。

![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/e7c11125-3c21-672b-4e7b-7c0000fb85b7.png)

再起動チェックリストのタブに、各ドメインパーティションが表示されていると思います。全てにチェックを入れて、「再起動」ボタンを押します。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/19dbabe9-90d5-e4bd-2907-d71d416775fa.png)

左メニューから「ドメイン・パーティション」のリンクをクリックし、各ドメイン・パーティションの状態を確認し、RUNNINGになればMedrecアプリケーションへアクセス可能となります。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/f7f56997-3d70-7a89-ce22-5a348e3fc4ec.png)

ただ、自分が試したときはなぜかvalley1とvalley2は再起動したときに状態がUNKOWNになってしまいました。みなさんもそうなるかもしれません。
その時は「制御」タブをクリックします。この画面ではvalley1とvalley2は状態がFAILEDになっていると思います。下記のようにパーティションを選択して「停止 -　ただちに強制停止」 で停止し、その後「起動」でもう一度再起動してみてください。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/5d4062a3-6d77-43cc-6fc8-c6f9b337a15a.png)

仮想ターゲットの設定変更が終わり、全てのパーティションがRUNNINGになったら、最後に各テナントで稼働するアプリケーションにアクセスしてみましょう。
http://192.168.99.100:7001/bayland/medrec
http://192.168.99.100:7001/valley1/medrec
http://192.168.99.100:7001/valley2/medrec
※IPアドレスは自分の環境のものに置き換えてください（WebLogic管理コンソールのと同じIPです）

下の画面のように3つのMedrecアプリケーションにアクセスできます（画像の中のURLはlocalhost:8001になっていますが無視してください）。画像がbaylandだけ異なるのは、そのパーティションに対してだけ予めデプロイに少し変更が加えられているためです。このようにマルチテナント環境では同じアプリケーションを提供しつつも、各テナント毎にカスタマイズを入れたいといったことが容易になります。

![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/33656395-be30-f3c8-a6dd-b63934c2d155.png)


以上になります。

この環境を使えば普通のシンプルなWebLogicドメインも、マルチテナントドメインも両方簡単に試用環境として利用できますので、ぜひ試してみてください。