2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

もう1つのサーブレットコンテナ Jetty を Docker で利用してみる

Last updated at Posted at 2020-10-04

Eclipse Jetty は Java サーブレットの実行環境(サーブレットコンテナ、Java EE の部分実装)であり、Web サーバです。サーブレットコンテナの実装としては Apache Tomcat が著名ですが、Jetty はより歴史が古く1、より軽量2です。商業サポートがアクティブコントリビュータである Webtide 社から提供されるほか、Apache Hadoop に組み込まれていたり、Google App Engine で利用されていたりします。

Jetty は Tomcat と比較してメモリフットプリントが小さいことから、コンテナ型仮想化環境で Java サーブレットを運用する際のリソース節約に役立ちます。本記事はそんな Jetty を Docker 上で利用する手順を紹介するものです。

Jetty を Docker で利用する

Docker Official Image が提供されています3。Jetty の各バージョンに対して OpenJDK LTS(Red Hat ビルド)と JRE、Debian と Debian slim の組み合わせからイメージを選べます。

バージョン 開発元 Java Java EE サーブレット JSP サポート期間 状態 備考
11 Eclipse 11~ 8 4.0.2 2.3 2020~ アルファ JakartaEE Namespaceに変更
10 Eclipse 11~ 8 4.0.2 2.3 2019~ ベータ
9.4 Eclipse 1.8~ 7 3.1 2.3 2016~ 安定版
9.3 Eclipse 1.8~ 7 3.1 2.3 2015~ 非推奨 HTTP/2、FastCGIをサポート
9.2 Eclipse 1.7~ 7 3.1 2.3 2014~2018 EOL Dockerイメージ配布を開始
9.1 Eclipse 1.7~ 7 3.1 2.3 2013~2014 EOL
9 Eclipse 1.7~ 7 3.1-beta 2.3 2013~2013 EOL
8 Eclipse/Codehaus 1.6~ 6 3 2.2 2009~2014 EOL
7 Eclipse/Codehaus 1.5~ 5 2.5 2.1 2008~2014 EOL WebSocket、SPDY v3をサポート
6 Codehaus 1.4~1.5 5 2.5 2 2006~2010 EOL
5 Sourceforge 1.2~1.5 1.4 2.4 2 2003~2009 Antique(骨董品)
4 Sourceforge 1.2、J2ME 1.3 2.3 1.2 2001~2006 Ancient(古代)
3 Sourceforge 1.2 1.2 2.2 1.1 1999~2002 Fossilized(化石) HTTP/1.1をサポート
2 Mortbay 1.1 - 2.1 1 1998~2000 Legendary(伝説)
1 Mortbay 1 - - - 1995~1998 Mythical(神話)

ここでは Jetty9 on OpenJDK11 on Debian10 を選択します:

docker pull jetty:9.4.31-jdk11

サーブレットのデプロイ方法は簡単で、/var/lib/jetty/webapps に WAR ファイル、もしくは圧縮前のサーブレットディレクトリを設置するだけです:

FROM jetty:9.4.31-jdk11
ADD sample.war /var/lib/jetty/webapps

コンテキスト.xml で任意の設置場所の指定も可能です:

FROM jetty:9.4.31-jdk11
ADD sampleApp.xml /var/lib/jetty/webapps
ADD sample /usr/local/sample
sampleApp.xml
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
    <Set name="contextPath">/sample</Set>
    <Set name="war">/usr/local/sample</Set>
</Configure>

環境設定

--list-config オプションを指定することで、現在の環境設定を参照できます:

$ docker run --rm jetty:9.4.31-jdk11 --list-config

Java Environment:
-----------------
 java.home = /usr/local/openjdk-11 (null)
 java.vm.vendor = Oracle Corporation (null)
 java.vm.version = 11.0.8+10 (null)
 java.vm.name = OpenJDK 64-Bit Server VM (null)
 java.vm.info = mixed mode (null)
 java.runtime.name = OpenJDK Runtime Environment (null)
 java.runtime.version = 11.0.8+10 (null)
 java.io.tmpdir = /tmp/jetty (null)
 user.dir = /var/lib/jetty (null)
 user.language = en (null)
 user.country = null (null)

Jetty Environment:
-----------------
 jetty.version = 9.4.31.v20200723
 jetty.tag.version = master
 jetty.home = /usr/local/jetty
 jetty.base = /var/lib/jetty

Config Search Order:
--------------------
 <command-line>
 ${jetty.base} -> /var/lib/jetty
 ${jetty.home} -> /usr/local/jetty


JVM Arguments:
--------------
 (no jvm args specified)

System Properties:
------------------
 (no system properties specified)

Properties:
-----------
 java.version = 11.0.8
 java.version.major = 11
 java.version.micro = 8
 java.version.minor = 0
 java.version.platform = 11
 jetty.base = /var/lib/jetty
 jetty.base.uri = file:///var/lib/jetty
 jetty.home = /usr/local/jetty
 jetty.home.uri = file:///usr/local/jetty

Jetty Server Classpath:
-----------------------
Version Information on 37 entries in the classpath.
Note: order presented here is how they would appear on the classpath.
      changes to the --module=name command line options will be reflected here.
 0:      1.4.1.v201005082020 | ${jetty.home}/lib/mail/javax.mail.glassfish-1.4.1.v201005082020.jar
 1:                    (dir) | ${jetty.base}/resources
 2:                    3.1.0 | ${jetty.home}/lib/servlet-api-3.1.jar
 3:                 3.1.0.M0 | ${jetty.home}/lib/jetty-schemas-3.1.jar
 4:         9.4.31.v20200723 | ${jetty.home}/lib/jetty-http-9.4.31.v20200723.jar
 5:         9.4.31.v20200723 | ${jetty.home}/lib/jetty-server-9.4.31.v20200723.jar
 6:         9.4.31.v20200723 | ${jetty.home}/lib/jetty-xml-9.4.31.v20200723.jar
 7:         9.4.31.v20200723 | ${jetty.home}/lib/jetty-util-9.4.31.v20200723.jar
 8:         9.4.31.v20200723 | ${jetty.home}/lib/jetty-io-9.4.31.v20200723.jar
 9:         9.4.31.v20200723 | ${jetty.home}/lib/jetty-jndi-9.4.31.v20200723.jar
10:         9.4.31.v20200723 | ${jetty.home}/lib/jetty-security-9.4.31.v20200723.jar
11:                      1.3 | ${jetty.home}/lib/transactions/javax.transaction-api-1.3.jar
12:         9.4.31.v20200723 | ${jetty.home}/lib/jetty-servlet-9.4.31.v20200723.jar
13:         9.4.31.v20200723 | ${jetty.home}/lib/jetty-webapp-9.4.31.v20200723.jar
14:         9.4.31.v20200723 | ${jetty.home}/lib/jetty-plus-9.4.31.v20200723.jar
15:         9.4.31.v20200723 | ${jetty.home}/lib/jetty-annotations-9.4.31.v20200723.jar
16:                    7.3.1 | ${jetty.home}/lib/annotations/asm-7.3.1.jar
17:                    7.3.1 | ${jetty.home}/lib/annotations/asm-analysis-7.3.1.jar
18:                    7.3.1 | ${jetty.home}/lib/annotations/asm-commons-7.3.1.jar
19:                    7.3.1 | ${jetty.home}/lib/annotations/asm-tree-7.3.1.jar
20:                      1.3 | ${jetty.home}/lib/annotations/javax.annotation-api-1.3.jar
21:    3.19.0.v20190903-0936 | ${jetty.home}/lib/apache-jsp/org.eclipse.jdt.ecj-3.19.0.jar
22:         9.4.31.v20200723 | ${jetty.home}/lib/apache-jsp/org.eclipse.jetty.apache-jsp-9.4.31.v20200723.jar
23:                   8.5.54 | ${jetty.home}/lib/apache-jsp/org.mortbay.jasper.apache-el-8.5.54.jar
24:                   8.5.54 | ${jetty.home}/lib/apache-jsp/org.mortbay.jasper.apache-jsp-8.5.54.jar
25:                    1.2.5 | ${jetty.home}/lib/apache-jstl/org.apache.taglibs.taglibs-standard-impl-1.2.5.jar
26:                    1.2.5 | ${jetty.home}/lib/apache-jstl/org.apache.taglibs.taglibs-standard-spec-1.2.5.jar
27:         9.4.31.v20200723 | ${jetty.home}/lib/jetty-client-9.4.31.v20200723.jar
28:         9.4.31.v20200723 | ${jetty.home}/lib/jetty-deploy-9.4.31.v20200723.jar
29:                      1.0 | ${jetty.home}/lib/websocket/javax.websocket-api-1.0.jar
30:         9.4.31.v20200723 | ${jetty.home}/lib/websocket/javax-websocket-client-impl-9.4.31.v20200723.jar
31:         9.4.31.v20200723 | ${jetty.home}/lib/websocket/javax-websocket-server-impl-9.4.31.v20200723.jar
32:         9.4.31.v20200723 | ${jetty.home}/lib/websocket/websocket-api-9.4.31.v20200723.jar
33:         9.4.31.v20200723 | ${jetty.home}/lib/websocket/websocket-client-9.4.31.v20200723.jar
34:         9.4.31.v20200723 | ${jetty.home}/lib/websocket/websocket-common-9.4.31.v20200723.jar
35:         9.4.31.v20200723 | ${jetty.home}/lib/websocket/websocket-server-9.4.31.v20200723.jar
36:         9.4.31.v20200723 | ${jetty.home}/lib/websocket/websocket-servlet-9.4.31.v20200723.jar

Jetty Active XMLs:
------------------
 ${jetty.home}/etc/jetty-bytebufferpool.xml
 ${jetty.home}/etc/jetty-threadpool.xml
 ${jetty.home}/etc/jetty.xml
 ${jetty.home}/etc/jetty-webapp.xml
 ${jetty.home}/etc/jetty-plus.xml
 ${jetty.home}/etc/jetty-annotations.xml
 ${jetty.home}/etc/jetty-deploy.xml
 ${jetty.home}/etc/jetty-http.xml

設定可能な項目については公式ドキュメントを参照してください。

なお JVM のオプションは環境変数 JAVA_OPTIONS で指定できます。

参考リンク

  1. Jetty の初版リリースは 1995 年で、Tomcat の初版リリースは 1999 年です。

  2. https://webtide.com/why-choose-jetty/

  3. ちなみに Google Cloud Platform Jetty Docker Image も Apache-2.0 ライセンスで公開されていたりします。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?