Capsule:开源的 JVM 应用部署工具(capsule用法)

网友投稿 1194 2022-09-23

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

Capsule:开源的 JVM 应用部署工具(capsule用法)

当下,经过一年的发展,Capsule 1.0 正式发布——一个简单、健壮且灵活的 JVM 应用部署工具。Capsule 迎合 JVM 应用的独特优势和需求,因此这里有理由相信这是最简单、最强大的 JVM 应用部署方式,不管是用于一个桌面应用、microservice 或复杂的 Web 应用。Capsule 不仅适用于 Java 应用程序,还能应用于所有 JVM 语言,从 Jruby、Jython 和 Groovy,到 Kotlin、Clojure 和 Scala,再到 Frege 和 OCaml-Java。如果你在写 JVM 程序,给 Capsule 一个机会。

Capsule 在设计时一直遵循以下原则:

当工具和标准已经存在时,不用再重造车轮。Capsule 是用 Java 编写的,并可以通过 Java 扩展。它遵循 JVM 生态系统,而不是重造车轮,仅使用现有的工具和标准。capsule 打包在一个可执行 JAR,并将所有元数据存储为简单的 JAR-manifest attributes 中;并且可以根据需要,从 Maven repositories 中下载全部或者部分,并通过 Maven、Gradle 和 Leiningen 这些流行的 JVM 工具构建。Capsule 本身是一个简单的 Maven 依赖,就像所有的构建工具插件,不需要再安装其他新工具。

通过 Caplets 实现的 Capsule 魔法

Capsule 之所以能保持简单还能提供这些功能主要归功于 caplets,以模块化定制 Capsule 行为。Caplets 可以嵌入到1个 capsule,或者单独进行包装并使用命令行包装和修改现有 capsule 行为。

首先是一个简单的 Hello World servlet。建成后,它将创建一个标准的 WAR 文件并部署到任何 servlet 容器。仔细观察后发现,WAR 的确有点特别。其内容是:

247 META-INF/MANIFEST.MF 1124 WEB-INF/classes/co/paralleluniverse/examples/HelloWorldServlet.class 653 WEB-INF/web.xml 161596 Capsule.class 1467463 capsule-maven-1.0.jar

如你所见, WAR 包含 Capsule 类,这意味着它是一个capsule,也是嵌入式 JAR,而 capsule-maven-1.0.jar是 Maven caplet。JAR manifest 是这样的:

Manifest-Version: 1.0Main-Class: CapsulePremain-Class: CapsuleCaplets: co.paralleluniverse:capsule-maven:1.0Application: org.eclipse.jetty:jetty-runner:9.3.3.v20150827Allow-Snapshots: trueMin-Java-Version: 1.7.0Args: $CAPSULE_JAR

取代部署 WAR 到 servlet 容器,你可以直接执行 java -jar build/libs/capsule-runnable-war.war (或者,甚至简单的./capsule-runnable-war.war,如果 capsule是「真正可执行」——见用户文档的指令),它会自动下载 Jetty,并用 Jetty 来启动 servlet。Jetty 工件将被缓存,并可以共享到其他需要的 caplets中。

608 META-INF/MANIFEST.MF 161596 Capsule.class 1467463 capsule-maven-1.0.jar 266 app.js

当 capsule 发布,Avatar 运行时——包括针对本地操作系统的本地库,将从 Maven repository 下载到本地并缓存,并与其他 Avatar capsules 共享。

其他 caplets 将包含:一个守护进程 caplet, 作为 Unix 或 Windows 守护进程来发布 capsule;一个安全 caplet,会在 Java 沙箱(通过安全策略定义)内启动 capsule;一个 desktop caplet,会将包含了一个 GUI 应用程序的 capsule 转化为一个 Windows、Mac 或 Linux 的本地可执行程序;一个容器 caplet,在一个或多个容器内运行 capsule。

为 Capsules 设计的轻量级容器

容器对沙箱应用来说是一个有效方式,可以简化部署和巩固服务器,所以对任何的软件堆栈而言,它们都非常有利于 dev-ops 和安全。然而,由于 JVM 应用只有最小的环境需求 (即一个内核和一个 JVM),它们通常是可移植的,使用一个像 Docker 的容器解决方案无疑是浪费时间和空间。另一方面,shield caplet 创建了一个轻量级容器,无需创建大图像。

例如,可以通过简单地桥接网络在1个容器中方便地运行 quasar-stocks Web 应用。

java -jar capsule-shield-0.1.0.jar quasar-stocks-thin.jar

随后就可以轻松地检索程序所运行的容器IP地址:

lxc-attach -P ~/.capsule/apps/quasarstocks.Application_0.1.0-SNAPSHOT/capsule-shield/ -n lxc -- /sbin/ifconfig

当一切如预期那样正常工作,无需任何复杂的操作,就可以在最终部署的服务器上(可能是一个守护进程)发布相同的命令来配置端口转发使服务公共可用,并通过沙箱保证了应用程序的强安全性。

现在

是时间打开 capsule.io 并启动 capsules 了!

它们需要跟踪以避免冲突,甚至这样还不够,因为它们不支持本地库。 它们可能需要不可移植的发布脚本,以便于在操作系统 shell 命令下执行,并选择正确的 JRE 版本、设置类路径、代理和 JVM 参数。 所有平台都支持 JVM,必要的脚本和本地构件可能也一样需要。 可能需要更长的启动时间,比如依赖项需要重新下载。 shield caplet 使用 LXC 将 capsule 放于容器内。

上一篇:大讲堂 | 提高JavaScript性能的30个技巧(大讲堂是什么意思)
下一篇:告警管理概述,浅谈告警管理能力成熟度模型
相关文章

 发表评论

暂时没有评论,来抢沙发吧~