Docker上のWebLogic に対して個別の設定変更をする方法

# はじめに

[Dockerで実践！ WebLogic Server 12.2.1のマルチテナントのサンプル環境を簡単に作成する](http://qiita.com/nobuhikosekiya/items/1979aef71b533a3b1450)　でWebLogic ServerをDocker上で実行する方法を紹介しましたが、自分でこのDockerイメージに対して何か設定変更するやり方を紹介します。

今回はOSに対してzipとunzipツールをインストールする例ですが、WebLogicに対して追加で設定を入れて保存しておきたい場合などにも利用できます。

# 実行中のDockerコンテナにYUMでソフトウェアを追加インストール
WebLogicのDockerイメージには必要最小限のソフトウェアしかインストールされていないため、zipやunzipコマンドが使えません。でも何かといじってみるとこの程度のツールは必要になってきますよね。

今回は自分の都合でWebLogic 12.1.3のイメージをベースにしていますが、12.2.1でも基本的に同じ手順です。

まずWebLogic 12.1.3のコンテナをrunします。
`$ docker run -d --name wlsadmin --hostname wlsadmin -p 8001:8001 1213-domain`

次にこのコンテナの中にログインします。yumでツールをインストールするため、rootを指定してログインします。

```
$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS
 PORTS                                        NAMES
bf569b3d1614        1213-domain         "startWebLogic.sh"   14 minutes ago      Up 14 minutes
 5556/tcp, 7001/tcp, 0.0.0.0:8001->8001/tcp   wlsadmin

$ docker exec -it --user root bf569b3d1614 bash
[root@wlsadmin oracle]#
```

以下の通り、zipコマンドは使えない状態です。

```
[root@wlsadmin oracle]# unzip
bash: unzip: command not found
[root@wlsadmin oracle]# zip
bash: zip: command not found
```

yumでインストールします。

```
# 社内プロキシからのアクセスの場合は、以下のようにプロキシ設定をします。
[root@wlsadmin oracle]# export http_proxy=http://xxxxx:80
[root@wlsadmin oracle]# export https_proxy=http://xxxxx:80

[root@wlsadmin oracle]# yum install zip unzip
Loaded plugins: ulninfo
Resolving Dependencies
--> Running transaction check
---> Package unzip.x86_64 0:6.0-15.el7 will be installed
---> Package zip.x86_64 0:3.0-10.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================
 Package             Arch                 Version                    Repository                Size
====================================================================================================
Installing:
 unzip               x86_64               6.0-15.el7                 ol7_latest               166 k
 zip                 x86_64               3.0-10.el7                 ol7_latest               259 k

Transaction Summary
====================================================================================================
Install  2 Packages

Total download size: 424 k
Installed size: 1.1 M
Is this ok [y/d/N]: y
Downloading packages:
(1/2): unzip-6.0-15.el7.x86_64.rpm                                           | 166 kB  00:00:01
(2/2): zip-3.0-10.el7.x86_64.rpm                                             | 259 kB  00:00:01
----------------------------------------------------------------------------------------------------
Total                                                               313 kB/s | 424 kB  00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : unzip-6.0-15.el7.x86_64                                                          1/2
  Installing : zip-3.0-10.el7.x86_64                                                            2/2
  Verifying  : zip-3.0-10.el7.x86_64                                                            1/2
  Verifying  : unzip-6.0-15.el7.x86_64                                                          2/2

Installed:
  unzip.x86_64 0:6.0-15.el7                         zip.x86_64 0:3.0-10.el7

Complete!
```

# コンテナイメージの保存 (docker commit)

これでツールがインストールされ、今回のコンテナにはツールが入っていますが、元となるDockerイメージには反映されていません。今のままだとこのコンテナを消して再び元のWebLogic 12.1.3のイメージからWebLogicをdocker runで起動すると、元通りになってしまいます。

docker commitコマンドを使い、Dockerイメージを更新します。

まず現状のイメージの確認。一番上の1213-domain:latestのイメージがいま利用しているものです。

```
$ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
1213-domain            latest              6a8a2a9373da        20 minutes ago      1.069 GB
oracle/weblogic        12.1.3-developer    04fdea8b08cf        24 minutes ago      1.068 GB
oraclelinux            latest              adf2d3d00fce        5 weeks ago         205.9 MB
hello-world            latest              690ed74de00f        6 months ago        960 B
```

これを以下のようにdocker psで確認できるコンテナIDをつけてコミットします。コミット先は同じREPOSITORY名とTAG名を指定していますので、実質イメージを更新しています。
```
$ docker commit bf569b3d1614 1213-domain:latest
sha256:209de5a50274bd9baba8c3b5828e1bc88b9355346abc698c9a0a6705ab4865f6
```

コミット結果を確認すると、1213-domain:latestのイメージサイズが前の1.0GBから1.5GBに増えています。

```
$ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
1213-domain            latest              209de5a50274        9 seconds ago       1.552 GB
oracle/weblogic        12.1.3-developer    04fdea8b08cf        34 minutes ago      1.068 GB
oraclelinux            latest              adf2d3d00fce        5 weeks ago         205.9 MB
hello-world            latest              690ed74de00f        6 months ago        960 B
```

想定外にイメージサイズが大きくなってしまいましたので、yumのキャッシュを消して再びイメージをdocker commitで更新してみます。

```
$ docker exec -it --user root bf569b3d1614 bash
[root@wlsadmin oracle]# yum clean
Loaded plugins: ulninfo
Error: clean requires an option: headers, packages, metadata, dbc
 all
[root@wlsadmin oracle]# yum clean all
Loaded plugins: ulninfo
Cleaning repos: ol7_UEKR3 ol7_latest
Cleaning up everything
[root@wlsadmin oracle]# exit

$ docker commit bf569b3d1614 1213-domain:latest
sha256:17d0cc566fce0b9bf47eb3f7c45a2bead779783f939d7d623d8cd9f3b20bab93

$ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
1213-domain            latest              17d0cc566fce        7 seconds ago       1.1 GB
<none>                 <none>              209de5a50274        2 minutes ago       1.552 GB
oracle/weblogic        12.1.3-developer    04fdea8b08cf        36 minutes ago      1.068 GB
oraclelinux            latest              adf2d3d00fce        5 weeks ago         205.9 MB
hello-world            latest              690ed74de00f        6 months ago        960 B

```

今度は1213-domain:latestは1.1GBに減らすことができました。
（と思っていたのですが、noneの形で1.5GBのイメージが残ってしまっていました。docker commitする前にdocker stopしていなかったので、消えずにこのような形で残ってしまったのだと思います。あとで下のdocker stopとdocker rmしてからdocker rmi 209de5a50274 で1.5GBの方のイメージを削除できます)

新しく更新したイメージからコンテナを起動して、zipがちゃんと入っているかを確認してみます。
まずいま動いているコンテナを削除します。

```
$ docker stop bf569b3d1614
bf569b3d1614

$ docker rm bf569b3d1614
bf569b3d1614
```

新しくrunします。

```
$ docker run -d --name wlsadmin --hostname wlsadmin -p 8001:8001 1213-domain
110b18ae4f40f247abde29821a7ec31d832a59fbc3ee9a268efb28f814d10043

$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS
 PORTS                                        NAMES
110b18ae4f40        1213-domain         "startWebLogic.sh"   4 seconds ago       Up 3 seconds
 5556/tcp, 7001/tcp, 0.0.0.0:8001->8001/tcp   wlsadmin
```

ログインしてzipコマンドが効くことが確認できました。

```
$ docker exec -it 110b18ae4f40 bash
[oracle@wlsadmin base_domain]$ zip
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
Zip 3.0 (July 5th 2008). Usage:
（省略）
```

以上