Skip to content

快速参考

  • 由……维护: (注:原文中“Maintained by:”后面应该会有具体的维护者信息,若有完整内容,翻译会更加准确。这里仅根据给定的部分进行了翻译。)
    Docker 社区

  • 哪里可以获得帮助:
    Docker 社区 Slack、Server Fault、Unix & Linux 或 Stack Overflow

支持的标签及各自的 Dockerfile 链接

快速参考(续)

什么是 Jetty?

Jetty 是一个纯基于 Java 的 HTTP(Web)服务器和 Java Servlet 容器。虽然 Web 服务器通常与向人们提供文档相关联,但 Jetty 现在常用于机器对机器的通信,通常在较大的软件框架内。Jetty 作为 Eclipse 基金会的一部分,作为一个免费和开源项目进行开发。该 Web 服务器用于诸如 Apache ActiveMQ、Alfresco、Apache Geronimo、Apache Maven、Apache Spark、Google App Engine、Eclipse、FUSE、Twitter 的 Streaming API 和 Zimbra 等产品中。Jetty 也是诸如 Lift、Eucalyptus、Red5、Hadoop 和 I2P 等开源项目中的服务器。Jetty 支持最新的 Java Servlet API(具有 JSP 支持)以及协议 SPDY 和 WebSocket。

wikipedia.org/wiki/Jetty_(网络服务器)

logo 标志 © Eclipse 基金会

如何使用此图像。

要在后台运行默认的 Jetty 服务器,请使用以下命令:

$ docker run -d jetty

您可以在浏览器中访问 http://container-ip:8080https://container-ip:8443/ 来进行测试。要将您的 Jetty 服务器暴露给外部请求,请使用如下端口映射:

$ docker run -d -p 80:8080 -p 443:8443 jetty

这会将容器内的端口 8080 映射为主机上的端口 80,将容器端口 8443 映射为主机端口 443。然后,您可以在浏览器中访问 http://host-iphttps://host-ip 。 (注:原文中的 http://host-iphttps://host-ip 不太明确其具体含义,所以在翻译中保留原样)

环境

图像中的默认 Jetty 环境为:

JETTY_HOME    =  /usr/local/jetty
JETTY_BASE    =  /var/lib/jetty
TMPDIR        =  /tmp/jetty

部署

Web 应用程序可以通过常规方式(WAR 文件、展开的 WAR 目录或上下文 XML 文件)部署在 /var/lib/jetty/webapps 下。要将您的应用程序部署到 / 上下文,使用名称 ROOT.war 、目录名称 ROOT 或上下文文件 ROOT.xml (不区分大小写)。

对于基于 Jetty 7 或 Jetty 8 的较旧的已到生命周期末期(EOL)的镜像,请按照 Eclipse Wiki 上的旧版说明操作,并在 /usr/local/jetty/webapps 下进行部署,而不是在 /var/lib/jetty/webapps 下。

配置

通过运行带有 --list-config 选项,可以报告 Jetty 服务器的配置:

$ docker run -d jetty --list-config

诸如参数和附加模块之类的配置也可以通过命令行传入。例如:

$ docker run -d jetty --module=jmx jetty.threadPool.maxThreads=500

要在派生的 Docker 映像中更新服务器配置, Dockerfile 可以使用 RUN 命令启用其他模块,例如:

FROM jetty

RUN java -jar "$JETTY_HOME/start.jar" --add-to-startd=jmx,stats

模块可以通过在相应的 /var/lib/jetty/start.d/*.ini 文件中编辑属性在 Dockerfile 中进行配置,或者可以通过删除该文件来停用模块。

JVM 配置

JVM 选项可通过将 JAVA_OPTIONS 环境变量传递给容器来进行设置。例如,要将最大堆大小设置为 1 千兆字节,您可以按如下方式运行容器:

$ docker run -e JAVA_OPTIONS="-Xmx1g" -d jetty

只读容器

要将 jetty 作为只读容器运行,让 Docker 将 /tmp/jetty/run/jetty 目录创建为卷:

$ docker run -d --read-only -v /tmp/jetty -v /run/jetty jetty

由于容器是只读的,您需要使用 -v /path/to/my/webapps:/var/lib/jetty/webapps 在您的 webapps 目录中进行挂载,或者在派生映像中填充 /var/lib/jetty/webapps

HTTP/2 支持

从 9.3 版本开始,Jetty 内置了对 HTTP/2 的支持。然而,由于用于实现 HTTP/2 的 ALPN 库可能存在许可证兼容性问题,该模块默认未启用。为了在派生的 Dockerfile 中为私人使用启用 HTTP/2 支持,您可以添加一个 RUN 命令来启用 http2 模块,并按如下方式批准其许可证:

FROM jetty

RUN java -jar $JETTY_HOME/start.jar --add-to-startd=http2 --approve-all-licenses

这将向 $JETTY_BASE/start.d 目录添加一个 http2.ini 文件,并将所需的 ALPN 库下载到 $JETTY_BASE/lib/alpn 中,从而允许使用 HTTP/2。HTTP/2 连接应通过与普通 HTTPS 连接相同的端口(容器端口 8443)进行。如果您想通过 $JETTY_BASE/start.ini 启用 http2 模块,则在上述 RUN 命令中用 --add-to-start 代替 --add-to-startd

安全

默认情况下,此图像以用户 root 启动,并在初始化后使用 Jetty 的 setuid 模块将权限降低到用户 jetty 。位于 /var/lib/jettyJETTY_BASE 目录由 jetty:jetty 拥有(uid 999,gid 999)。

如果您希望图像作为用户 jetty 立即开始,而不是作为 root 开始,您可以使用 -u jetty 启动容器:

$ docker run -d -u jetty jetty

图像变体

jetty 图像有多种类型,每种都针对特定的用例而设计。

jetty:<version>

这是事实上的映像。如果您不确定自己的需求是什么,您可能想要使用这个。它被设计为既可以用作一次性容器(挂载您的源代码并启动容器以启动您的应用程序),也可以作为构建其他映像的基础。

jetty:<version>-alpine

此图像基于流行的 Alpine Linux 项目,可在 alpine 官方镜像中获取。Alpine Linux 比大多数发行版基础镜像(约 5MB)小得多,因此总体上会生成更精简的镜像。

当您首要关注的是最终图像大小尽可能小的时候,此变体是有用的。需要注意的主要警告是,它确实使用 musl libc 而不是 glibc 及相关库,因此软件往往会根据其对 libc 要求/假设的深度而遇到问题。有关可能出现的问题以及使用基于 Alpine 的图像的一些利弊比较的更多讨论,请参阅此 Hacker News 评论线程。

为尽量减小镜像大小,在基于 Alpine 的镜像中通常不会包含其他相关工具(例如 gitbash )。以该镜像为基础,在您自己的 Dockerfile 中添加您需要的内容(如果您不熟悉如何安装软件包,请参阅 alpine 镜像说明中的示例)。

许可证

查看此映像中所包含软件的许可证信息。

与所有 Docker 镜像一样,这些镜像可能还包含其他可能受其他许可证约束的软件(例如来自基础发行版的 Bash 等,以及所包含的主要软件的任何直接或间接依赖项)。

一些能够自动检测到的额外许可信息可能会在 repo-info 存储库的 jetty/ 目录中找到。

对于任何预构建图像的使用,图像用户有责任确保对此图像的任何使用都符合其中包含的所有软件的任何相关许可。