OSS Fan ~OSSでLinuxサーバ構築~

作成日: 2016/08/21

OSSでLinuxサーバ構築

Docker 1.10.3でWildFly 10.0.0のコンテナを作成

トップページOSSでLinuxサーバ構築 > Docker 1.10.3でWildFly 10.0.0のコンテナを作成
このエントリーをはてなブックマークに追加

概要

 Docker 1.10.3が稼働しているサーバ上で、ベースとなるCentOS 7.2のDockerイメージをダウンロードし、 そこに、Oracle JDKとWildFlyをインストールします。 今回はDocker上での設定手順を確認するのが目的だったため、Dockerfileはあえて使用していません。 また、手順の中でJavaアプリのデプロイは行っていません。 実運用ではDockerfile化することと併せて、GitHubからアプリをデプロイする手順やデータソースの設定も必要ですね。

構成

サーバ構成

OSバージョン

CentOS 7.2.1511 x86_64

ソフトウェア・パッケージ一覧

  • docker-1.10.3-46.el7.centos.10.x86_64.rpm

クライアント構成

OSバージョン

Windows 10 Pro 64bit

ソフトウェア・パッケージ一覧

  • Microsoft Edge 25

サーバ構築

設定

(1) CentOS 7.2のDockerイメージダウンロード

 Dockerリポジトリからコンテナのベースとして使用するCentOS 7.2のDockerイメージをダウンロードします。 Dockerリポジトリをサーチすると、CentOSのイメージが多数表示されますが、その中から公式リポジトリを採用します。

# docker search centos
INDEX       NAME                                    DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/centos                        The official build of CentOS.                   2547      [OK] ←これをダウンロードする
docker.io   docker.io/jdeathe/centos-ssh            CentOS-6 6.8 x86_64 / CentOS-7 7.2.1511 x8...   27                   [OK]
docker.io   docker.io/nimmis/java-centos            This is docker images of CentOS 7 with dif...   14                   [OK]
docker.io   docker.io/million12/centos-supervisor   Base CentOS-7 with supervisord launcher, h...   12                   [OK]
docker.io   docker.io/gluster/gluster-centos        Official GlusterFS Image [ CentOS7 +  Glus...   11                   [OK]
(以下省略)
# docker pull centos
Using default tag: latest
Trying to pull repository docker.io/library/centos ...
latest: Pulling from docker.io/library/centos
3d8673bd162a: Pull complete
Digest: sha256:a66ffcb73930584413de83311ca11a4cb4938c9b2521d331026dad970c19adf4
Status: Downloaded newer image for docker.io/centos:latest
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    latest              970633036444        2 weeks ago         196.7 MB

(2) Dockerコンテナの生成

 ダウンロードしたCentOS 7.2のDockerイメージをベースにDockerコンテナを生成します。 コンテナには ap04 という名前を付けます。名前は任意です。

# docker run --name ap04 -i -t centos:latest /bin/bash

 上記コマンドでDockerコンテナを生成すると、自動的にコンテナが起動し、コンソールに接続されます。 以下の作業はDockerコンテナのコンソール上で行います。

(3) Oracle JDKとWildFlyのダウンロード

 Oracle JDKとWildFlyのインストールパッケージをダウンロードします。 ダウンロードにはwgetコマンドを使用しますが、インストールされていなかったので、先にインストールします。

[root@0c65319d7c65 /]# cd /media/
[root@0c65319d7c65 media]# mkdir installer
[root@0c65319d7c65 media]# cd installer/
[root@0c65319d7c65 installer]# yum -y install wget
Loaded plugins: fastestmirror, ovl
base                                                                                                                 | 3.6 kB  00:00:00
extras                                                                                                               | 3.4 kB  00:00:01
updates                                                                                                              | 3.4 kB  00:00:00
(1/4): base/7/x86_64/group_gz                                                                                        | 155 kB  00:00:00
(2/4): extras/7/x86_64/primary_db                                                                                    | 160 kB  00:00:04
(3/4): base/7/x86_64/primary_db                                                                                      | 5.3 MB  00:00:08
(4/4): updates/7/x86_64/primary_db                                                                                   | 6.5 MB  00:00:10
Determining fastest mirrors
 * base: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * updates: ftp.jaist.ac.jp
Resolving Dependencies
--> Running transaction check
---> Package wget.x86_64 0:1.14-10.el7_0.1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================================================
 Package                       Arch                            Version                                  Repository                     Size
============================================================================================================================================
Installing:
 wget                          x86_64                          1.14-10.el7_0.1                          base                          545 k

Transaction Summary
============================================================================================================================================
Install  1 Package

Total download size: 545 k
Installed size: 2.0 M
Downloading packages:
warning: /var/cache/yum/x86_64/7/base/packages/wget-1.14-10.el7_0.1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY0 ETA
Public key for wget-1.14-10.el7_0.1.x86_64.rpm is not installed
wget-1.14-10.el7_0.1.x86_64.rpm                                                                                      | 545 kB  00:00:02
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-2.1511.el7.centos.2.10.x86_64 (@CentOS)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : wget-1.14-10.el7_0.1.x86_64                                                                                              1/1
install-info: No such file or directory for /usr/share/info/wget.info.gz
  Verifying  : wget-1.14-10.el7_0.1.x86_64                                                                                              1/1

Installed:
  wget.x86_64 0:1.14-10.el7_0.1

Complete!
[root@0c65319d7c65 installer]# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u92-b14/jdk-8u92-linux-x64.rpm"
--2016-08-20 02:38:24--  http://download.oracle.com/otn-pub/java/jdk/8u92-b14/jdk-8u92-linux-x64.rpm
Resolving download.oracle.com (download.oracle.com)... 110.232.152.34, 110.232.152.35
Connecting to download.oracle.com (download.oracle.com)|110.232.152.34|:80... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://edelivery.oracle.com/otn-pub/java/jdk/8u92-b14/jdk-8u92-linux-x64.rpm [following]
--2016-08-20 02:38:24--  https://edelivery.oracle.com/otn-pub/java/jdk/8u92-b14/jdk-8u92-linux-x64.rpm
Resolving edelivery.oracle.com (edelivery.oracle.com)... 23.67.164.165
Connecting to edelivery.oracle.com (edelivery.oracle.com)|23.67.164.165|:443... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://edelivery.oracle.com/osdc-otn/otn-pub/java/jdk/8u92-b14/jdk-8u92-linux-x64.rpm [following]
--2016-08-20 02:38:25--  https://edelivery.oracle.com/osdc-otn/otn-pub/java/jdk/8u92-b14/jdk-8u92-linux-x64.rpm
Reusing existing connection to edelivery.oracle.com:443.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: http://download.oracle.com/otn-pub/java/jdk/8u92-b14/jdk-8u92-linux-x64.rpm?AuthParam=1471660825_40cdd1d5b688f335c24a2467a3d0da74 [following]
--2016-08-20 02:38:25--  http://download.oracle.com/otn-pub/java/jdk/8u92-b14/jdk-8u92-linux-x64.rpm?AuthParam=1471660825_40cdd1d5b688f335c24a2467a3d0da74
Connecting to download.oracle.com (download.oracle.com)|110.232.152.34|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 165953904 (158M) [application/x-redhat-package-manager]
Saving to: 'jdk-8u92-linux-x64.rpm'

100%[==================================================================================================>] 165,953,904 1.89MB/s   in 87s

2016-08-20 02:39:52 (1.83 MB/s) - 'jdk-8u92-linux-x64.rpm' saved [165953904/165953904]

[root@0c65319d7c65 installer]# wget http://download.jboss.org/wildfly/10.0.0.Final/wildfly-10.0.0.Final.tar.gz
--2016-08-20 02:40:06--  http://download.jboss.org/wildfly/10.0.0.Final/wildfly-10.0.0.Final.tar.gz
Resolving download.jboss.org (download.jboss.org)... 104.77.54.50
Connecting to download.jboss.org (download.jboss.org)|104.77.54.50|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 137189474 (131M) [application/x-gzip]
Saving to: 'wildfly-10.0.0.Final.tar.gz'

100%[==================================================================================================>] 137,189,474  319KB/s   in 5m 20s

2016-08-20 02:45:27 (419 KB/s) - 'wildfly-10.0.0.Final.tar.gz' saved [137189474/137189474]

[root@0c65319d7c65 installer]# ls -l
total 296044
-rw-r--r-- 1 root root 165953904 Apr  1 17:07 jdk-8u92-linux-x64.rpm
-rw-r--r-- 1 root root 137189474 Jan 30  2016 wildfly-10.0.0.Final.tar.gz

(4) Oracle JDKのインストール

 ダウンロードしたOracle JDKをインストールします。

[root@0c65319d7c65 installer]# rpm -ihv jdk-8u92-linux-x64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:jdk1.8.0_92-2000:1.8.0_92-fcs    ################################# [100%]
Unpacking JAR files...
        tools.jar...
        plugin.jar...
        javaws.jar...
        deploy.jar...
        rt.jar...
        jsse.jar...
        charsets.jar...
        localedata.jar...

(5) WildFlyのインストール

 ダウンロードしたWildFlyをインストールします。 ファイルはtar.gz形式でアーカイブされているだけなので、tarコマンドで解凍するだけです。 解凍先(インストール先)フォルダは /opt/ とします。

[root@0c65319d7c65 installer]# tar zxvf wildfly-10.0.0.Final.tar.gz -C /opt/
wildfly-10.0.0.Final/
wildfly-10.0.0.Final/.installation/
wildfly-10.0.0.Final/appclient/
wildfly-10.0.0.Final/appclient/configuration/
wildfly-10.0.0.Final/bin/
(中略)
wildfly-10.0.0.Final/welcome-content/jbosscommunity_logo_hori_white.png
wildfly-10.0.0.Final/welcome-content/noconsole.html
wildfly-10.0.0.Final/welcome-content/noredirect.html
wildfly-10.0.0.Final/welcome-content/wildfly.css
wildfly-10.0.0.Final/welcome-content/wildfly_logo.png

(6) グループの作成

 インストールしたWildFly関連のファイルの所有ユーザはUID 505、所有グループはGID 505といずれも存在していません。 ここで所有グループを作成します。 名前は wildfly とし、GIDは 1001 とします。特に何番でも良いです。

[root@0c65319d7c65 installer]# groupadd -g 1001 wildfly
[root@0c65319d7c65 installer]# tail -n 2 /etc/group
dbus:x:81:
wildfly:x:1001:

(7) ユーザの作成

 続いて所有ユーザを作成します。 名前は wildfly とし、UIDは 1001 とします。こちらも特に何番でも良いです。 ユーザ作成後にパスワードも設定します。

[root@0c65319d7c65 installer]# useradd -u 1001 -g 1001 wildfly
[root@0c65319d7c65 installer]# tail -n 2 /etc/passwd
dbus:x:81:81:System message bus:/:/sbin/nologin
wildfly:x:1001:1001::/home/wildfly:/bin/bash
[root@0c65319d7c65 installer]# passwd wildfly
Changing password for user wildfly.
New password: ←パスワードを入力
Retype new password: ←上と同じパスワードを入力
passwd: all authentication tokens updated successfully.

(8) WildFlyの所有ユーザ・グループ設定

 作成したユーザ・グループをWildFly関連のファイルの所有ユーザ・所有グループとして設定します。

[root@0c65319d7c65 installer]# cd /opt/
[root@0c65319d7c65 installer]# ls -l
total 4
drwxr-xr-x 10 505 505 4096 Jan 29  2016 wildfly-10.0.0.Final
[root@0c65319d7c65 opt]# chown -R wildfly:wildfly wildfly-10.0.0.Final/
[root@0c65319d7c65 opt]# ls -l
total 4
drwxr-xr-x 10 wildfly wildfly 4096 Jan 29  2016 wildfly-10.0.0.Final

(9) WildFlyのバインドアドレス設定

 WildFlyのインストール直後は 127.0.0.1(ループバックアドレス)のみで接続可能な設定になっています。 これではコンテナ外から接続することができないので、 0.0.0.0(任意のアドレス)で接続可能な設定に変更します。

[root@0c65319d7c65 opt]# cd /opt/wildfly-10.0.0.Final/standalone/configuration/
[root@0c65319d7c65 configuration]# vi standalone.xml
ファイル名:/opt/wildfly-10.0.0.Final/standalone/configuration/standalone.xml
※以下、該当箇所のみ変更※
            <wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host>
        ↓変更
            <wsdl-host>${jboss.bind.address:0.0.0.0}</wsdl-host>

            <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
        ↓変更
            <inet-address value="${jboss.bind.address.management:0.0.0.0}"/>

            <inet-address value="${jboss.bind.address:127.0.0.1}"/>
        ↓変更
            <inet-address value="${jboss.bind.address:0.0.0.0}"/>

(10) コンテナからの切断

 一通り設定が完了したので、コンテナのコンソールから切断します。

[root@0c65319d7c65 opt]# exit
exit

(11) Dockerコンテナのイメージ化

 作成したDockerコンテナをDockerイメージとして保存します。 Dockerイメージ化しておくことで、今後同じDockerコンテナをいくつも同じ状態で起動することができます。 ここではイメージの名前を ranocci/wildfly10 とします。 DockerイメージがJavaのクラス、DockerコンテナがJavaのインスタンスみたいな関係ですかね。

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
0c65319d7c65        centos:latest       "/bin/bash"         22 minutes ago      Exited (0) 5 seconds ago                       ap04 ←設定したDockerコンテナ
# docker commit ap04 ranocci/wildfly10
sha256:591e6831414411f3e1317da5ac50f03191147136790f0d3f7cbe3d9a3a95e811
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
ranocci/wildfly10   latest              591e68314144        About a minute ago   1.094 GB ←作成したDockerイメージ
docker.io/centos    latest              970633036444        3 weeks ago          196.7 MB

(12) Dockerコンテナの削除

 構築したDockerコンテナをDockerイメージ化したので、Dockerコンテナを一度削除します。 現在のDockerコンテナは、起動すると /bin/bash が起動するようになっており、WildFlyは起動しません。 そのため、WildFlyが自動で起動するDockerコンテナを後から必要に応じて作成します。

# docker rm ap04
ap04
# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

(13) WildFlyが起動するDockerコンテナの生成

 今度はWildFlyが起動するDokerコンテナを生成します。 コンテナは ap04 という名前とし、wildfly ユーザでWildFlyのプロセスを起動します。 起動するユーザは -u オプションで指定しますが、コンテナ内のユーザを指定します。 また、ホストOSが受信した8080/tcpポートへのアクセスは、コンテナの8080/tcpポートに転送される設定とします。 指定したオプションを整理すると以下の通りとなります。

-dコンテナをバックグラウンドで起動します。
--name ap04コンテナの名前を ap04 としています。名前は任意です。
-u wildflyWildFlyの起動シェルスクリプトを実行するユーザとしてwildflyを指定ます。このユーザはコンテナ内で利用可能なユーザでなければなりません。
-p 8080:8080ホストOSとコンテナでポートのマッピングを行います。ホストOSが受信した8080/tcpのアクセスはコンテナの8080/tcpに転送されます。
ranocci/wildfly10:latest起動するコンテナのベースとなるDockerイメージを指定します。先ほど作成したイメージを使用します。
/opt/wildfly-10.0.0.Final/bin/standalone.shコンテナ起動時に実行されるコマンドとして、WildFlyの起動シェルスクリプトを指定します。
# docker run -d --name ap04 -u wildfly -p 8080:8080 ranocci/wildfly10:latest /opt/wildfly-10.0.0.Final/bin/standalone.sh
e822590a04eab144bfb5351758095672dbc347893ab37821bd348f5f127ef541
# docker ps
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS                    NAMES
e822590a04ea        ranocci/wildfly10:latest   "/opt/wildfly-10.0.0."   22 seconds ago      Up 20 seconds       0.0.0.0:8080->8080/tcp   ap04 ←Dockerコンテナが起動した

動作テスト

リスニングポートの確認

 ホストOS上で8080ポートがリスニング状態であることを確認します。

# ss -ant
State      Recv-Q Send-Q                         Local Address:Port                                        Peer Address:Port
LISTEN     0      128                                        *:22                                                     *:*
LISTEN     0      100                                127.0.0.1:25                                                     *:*
ESTAB      0      0                               192.168.0.80:22                                         192.168.0.101:50179
LISTEN     0      128                                       :::8080                                                  :::* ←8080をリスニングしている
LISTEN     0      128                                       :::22                                                    :::*
LISTEN     0      100                                      ::1:25                                                    :::*

ブラウザからアクセス

 起動したDockerコンテナのWildFlyにブラウザでアクセスします。 今回の環境ではホストOSのIPアドレスが 192.168.0.80 で、WildFlyは 8080/tcp でリスニングしているので、 URLは「http://192.168.0.80:8080/」となります。 アクセスすると、Dockerが8080/tcpの通信をコンテナに転送し、WildFlyがレスポンスを返します。 Javaアプリはデプロイしていないので、WildFlyのウェルカムページが表示されれば正常に動作していると判断できます。

Dockerコンテナで稼働するWildFlyにブラウザでアクセス

Dockerコンテナの停止

 最後に念のためDockerコンテナが正常に停止することを確認します。

# docker stop ap04
ap04
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES ←起動中のDockerコンテナはなし
# docker ps -a
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                        PORTS               NAMES
e822590a04ea        ranocci/wildfly10:latest   "/opt/wildfly-10.0.0."   4 minutes ago       Exited (137) 15 seconds ago                       ap04

プロフィール

らのっち

損害保険会社のIT企画部に勤務するSEです。OSSを勉強中です。

<所属>
日本PostgreSQLユーザ会とくしまOSS普及協議会


第000414号