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
環境構築
設定
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
Dockerコンテナの生成
ダウンロードしたCentOS 7.2のDockerイメージをベースにDockerコンテナを生成します。 コンテナには ap04 という名前を付けます。名前は任意です。
# docker run --name ap04 -i -t centos:latest /bin/bash
上記コマンドでDockerコンテナを生成すると、自動的にコンテナが起動し、コンソールに接続されます。 以下の作業はDockerコンテナのコンソール上で行います。
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
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...
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
グループの作成
インストールした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:
ユーザの作成
続いて所有ユーザを作成します。 名前は 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.
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
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
※以下、該当箇所のみ変更※ <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}"/>
コンテナからの切断
一通り設定が完了したので、コンテナのコンソールから切断します。
[root@0c65319d7c65 opt]# exit exit
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
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
WildFlyが起動するDockerコンテナの生成
今度はWildFlyが起動するDokerコンテナを生成します。 コンテナは ap04 という名前とし、wildfly ユーザでWildFlyのプロセスを起動します。 起動するユーザは -u オプションで指定しますが、コンテナ内のユーザを指定します。 また、ホストOSが受信した8080/tcpポートへのアクセスは、コンテナの8080/tcpポートに転送される設定とします。 指定したオプションを整理すると以下の通りとなります。
-d | コンテナをバックグラウンドで起動します。 |
---|---|
--name ap04 | コンテナの名前を ap04 としています。名前は任意です。 |
-u wildfly | WildFlyの起動シェルスクリプトを実行するユーザとして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コンテナの停止
最後に念のため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