免费下载!由 O’Reilly 出版的《NGINX 完全指南》中文版已正式上线 了解详情
写点什么

Capsule:支持容器的 JVM 应用程序打包部署工具

  • 2015-09-14
  • 本文字数:1827 字

    阅读完需:约 6 分钟

尽管 JVM 应用程序对环境的依赖非常小,但让人奇怪的是,现在并没有一种通用又好用的 JVM 应用程序部署工具。 Fat JAR 不支持本地库,而且需要特定于平台的脚本。 Docker 太笨重,而且作为一个运行时无关的工具,无法利用 JVM 的优势。近日, Parallel Universe 宣布 Capsule 1.0 正式发布。这是一个简洁、健壮而又不失灵活的开源 JVM 应用程序部署工具。它可以用于部署桌面应用程序、微服务或复杂的 Web 应用程序,而且不仅支持 Java 应用程序,还支持其它所有的 JVM 语言,如 JRuby Jython Groovy Clojure OCaml-Java 等。用户可以将它视为一个增强版的 Fat JAR 和一个一体的声明式启动脚本;也可以将它视为构建工具伴侣,构建工具负责构建,而它负责应用程序构建与启动之间的事情。Capsule 主要遵循如下设计原则:

  • 打出的包要小、可移植、便捷:不管多复杂的 JVM 应用程序,经过 Capsule 打包后都只会生成一个名为 capsule(注:Capsule 指工具本身,capsule 指由该工具生成的包)的可在所有平台上执行的 JAR 包。capsule 可以直接包含所有的应用程序依赖,也可以仅仅声明部分或全部依赖,并在启动时下载。capsule 本身也可以存放在 Maven 库中,然后在启动时下载。
  • 最小化安装 JVM 应用程序对主机系统的影响,并提供更新支持选项:capsule 首次安装时会在一个临时目录中创建一些文件,用户可以随时删除这些文件,并不会带来不良影响。capsule 也可以根据需要查找更新。
  • 启动必须有确定性,同时要灵活、安全,可以施加限制:启动 capsule 不需要脚本。它会自行查找所需的 JVM 版本,设置 classpath 和必要的代理及 JVM 标识。capsule 在启动时还可以创建自己的容器。JVM 应用程序可以在这个没有特权的容器中运行,并由 JVM 的安全机制提供安全保障。而且,所有这些功能都可以通过 _caplets_ 进行编程和组合。
  • 如果现有的工具满足要求,就不创建新的工具和标准:Capsule 使用 Java 编写,可以用 Java 扩展。capsule 被打包在一个可执行的 JAR 包中,所有的元数据均以 JAR-manifest 属性的形式存储。同其它所有构建工具插件一样,capsule 本身就是一个简单的 Maven 依赖项。

Capsule 能在提供所有这些功能的同时保持简洁,主要得益于 _ caplets _。用户可以使用它们定制 capsule 的行为。_Caplets_ 可以嵌入到 capsule 中,也可以单独打包。 Maven caplet 是 Capsule 的第一个 caplet。它允许用户在 manifest 属性中声明应用程序的部分或全部依赖,而不用将它们嵌入到 capsule JAR 中。让我们看一个例子,这是一个简单的Hello World Servlet。构建完成后,它会创建一个标准的WAR 文件。该文件可以部署到任何Servlet 容器,其内容如下:

复制代码
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.0
Main-Class: Capsule
Premain-Class: Capsule
Caplets: co.paralleluniverse:capsule-maven:1.0
Application: org.eclipse.jetty:jetty-runner:9.3.3.v20150827
Allow-Snapshots: true
Min-Java-Version: 1.7.0
Args: $CAPSULE_JAR

如果该 capsule 真正执行,那么它会自动下载 Jetty ,并使用它启动该 Servlet。此外,Capsule 还提供了如下 caplet:

此外,与 Docker 相比,capsule 容器更轻量级,构建速度更快。而且,由于 capsule 在没有特权的容器中运行,所以更安全:在容器中进行 root 访问不会转变成主机上的 root 访问。借助 Shield caplet (即安全 caplet),使用如下代码就可以让 Web 应用程序 quasar-stocks 在容器中运行:

复制代码
java -jar capsule-shield-0.1.0.jar quasar-stocks-thin.jar

要了解更多信息,请查看 Capsule 网站用户指南


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-09-14 19:002638
用户头像

发布了 1008 篇内容, 共 357.4 次阅读, 收获喜欢 332 次。

关注

评论

发布
暂无评论
发现更多内容

翻译:《实用的Python编程》09_03_Distribution

codists

Python

python 变量作用域和列表

若尘

变量 Python编程 作用域

为什么微服务一定要有 API 网关?

xcbeyond

微服务 api 网关 4月日更

关于数字人民币、加密货币,央行前行长周小川、副行长李波博鳌论坛发声

CECBC

数字货币

如何从零开始学Python:(3)划重点:使用IDLE创建列表时需要注意的地方

广之巅

Python 4月日更

ARTS- Week 7

steve_lee

对话声网 Agora 首席科学家钟声 :5G时代到来前景下RTE实时互动技术的应用与发展

麦洛

Java

浅谈JVM和垃圾回收

leonsh

Java JVM JVM虚拟机原理 垃圾回收算法

架构实战营 模块2 课后作业

༺NPE༻

精通比特币:为什么它对自由、财务和未来至关重要(上篇)

CECBC

比特币

面试4轮字节Java研发岗,最终拿下Offer(原题复盘)

码农之家

编程 程序员 互联网 面试 字节

一种提升流媒体服务DSS的IO并发性能方案

Changing Lin

签约计划 4月日更

使用Agora SDK开发React Native视频通话App

声网

RTC React Native 声网 RTE

为什么我愿意持续做这样一件看似没有价值的事情

leoay

坚持 持续写作 长期价值

【AI全栈二】视频流多目标多类别无延迟高精度高召回目标追踪

cv君

音视频 目标检测 视频跟踪 引航计划

访谈阿里巴巴安全科学家吴翰清

容光

专访 阿里吴翰清 最新网络安全

深入理解Java虚拟机-HotSpot

华章IT

Java JVM 虚拟机

浅谈在探索数分之路上的“数据思维”论述

小飞象@木木自由

数据分析 数据分析体系 数据思维 数据分析方法论

百度大脑3月新品推荐:EasyDL视频目标追踪全新发布

百度大脑

百度大脑 EasyDL

领域驱动设计 101- 上下文与持续集成

luojiahu

领域驱动设计 DDD

Lombok初始使用及遇到的问题

风翱

lombok 4月日更

对话声网 Agora 首席科学家钟声 :声网的未来规划和人才建议

小诚信驿站

采访 调查采访能力考核

奇绩创坛2021秋季创业营开始报名

奇绩创坛

斗智亦斗棋,零售云市场的“楚河汉界”突围赛

脑极体

Python 爬虫实战(一) 爬取自如网租房信息

U+2647

python 爬虫 4月日更

融合趋势下基于 Flink Kylin Hudi 湖仓一体的大数据生态体系

Apache Flink

flink

Excelize 2.4.0 正式版发布, 新支持 152 项公式函数

xuri

GitHub 开源 Excel Go 语言 Excelize

朱嘉明:算力产业正面临着一个十年的长周期

CECBC

数字经济

《采访彩食鲜 CTO 乔新亮:IT 团队从 100 到 10000 的管理心得》(采访提纲)

程序员历小冰

调查采访能力考核

简单了解InnoDB底层原理

leonsh

MySQL 数据库 innodb

【提纲】专访融云CTO杨攀 | 技术型人才的自我修炼

Python研究所

调查采访能力考核

Capsule:支持容器的JVM应用程序打包部署工具_JVM_谢丽_InfoQ精选文章