五个基于Java的Docker镜像

简介: 本文讲的是五个基于Java的Docker镜像,【编者的话】Java 语言长期占据编程语言前三甲的位置,其受欢迎程度与重要性不言而喻。在容器化技术大潮中,Java 可扬容器化之长,避自身“臃肿”之短,取得更高成就。
本文讲的是五个基于Java的Docker镜像 【编者的话】Java 语言长期占据编程语言前三甲的位置,其受欢迎程度与重要性不言而喻。在容器化技术大潮中,Java 可扬容器化之长,避自身“臃肿”之短,取得更高成就。本文选择了5个有代表性的 Java 镜像进行了介绍,并指出了其现存的一些问题和解决方案,供相关人员参考。

尽管 Java 看起来不是很“时髦”,但仍是一门在 移动市场 、开源界及企业中占据主导地位的非常受欢迎的重要的语言。举个例子,你可知道在 Apache 软件基金会中 63%的项目 是用 Java 写的么?

幸运的是,在容器技术发展进程中,Java 开发人员并未被冷落。本文将着重介绍五个(译注:原文误写为“四个”)流行的基于 Java 的 Docker 镜像与配置,以及他们如何能帮助你的团队更有效地工作。

STASH

Stash  是个 Git 代码管理和协作工具。Stash 允许将部署节点集群化,从而减少活动主机的停机时间,且不会对每个添加的节点造成性能影响。Stash 还集成了 JIRA(同一公司出品)的可追溯能力,并为团队提供协作工具,具有类似这样的功能:当一个 pull 请求处于打开状态时,代码被修改将触发警报。

细节

如果你想将 Git 远程主机从一个 Stash 实例迁移到另一个 Stash 实例,请注意虽然可以把仓库复制过去, pull 请求却是无法被复制过去的。你也不能在实例间迁移。不过,Stash 的开发团队 会在将来添加这些功能

在生成 JIRA 数据库结构时,请注意 JIRA 6.1 EAP 3 包含了重大修改 ,可能会造成插件停止工作。

Stash 可以限制对重要代码分支的写权限,防止新成员误操作。Stash 允许开发人员将代码提交到自己的服务器端仓库上,然后由项目管理者审核并合并到主项目仓库中。

在 Stash 中开始一个新项目时,项目管理者应从一个全新的仓库入手:
ssh user@host
git init --bare /path/to/repo.git 

所有其他成员需要通过 SSH 进入这个仓库,并将其复制到服务器的另一个地方。Stash 称之为“ 分流流程 ”(Forking Workflow),这对于来自 SVN 背景的人有点不同寻常。

TOMCAT

Tomcat  是个实现了 Oracle 的  Java Servlet  及  JSP  规范的开源 Web 服务器及 Servlet 容器。它提供了一个标准的 HTTP 环境用于运行代码。在最简配置时,Tomcat 运行于单一的系统进程中。在旧机器上工作的开发人员通过容器安装 Tomcat 将不需要完整的虚拟机环境,从而腾出资源。

细节

对运行 Linux 虚拟机的用户而言,在 Docker 容器中运行 Tomcat 的性能可能会非常差,容器的启动速度很慢或非常卡。

如果宿主系统是 Linux,可以使用 熵收集守护进程(Entropy Gathering Daemon,简称EDG) 来解决这个问题。如果是使用 Boot2Docker,由于 Boot2Docker 的 Tiny Core Linux 扩展中没有 EGD,这个问题将尤为突出。将宿主的  /dev/urandom  装载成容器的  /dev/random  可 作为临时解决方法

如果在 Docker 中运行 Tomcat 时,虚拟机也在经历低熵,VirtualBox 提供了 一些方案来提高虚拟机的熵

APACHE HADOOP

Apache Hadoop  是个用于将大数据集分布到大量计算机中的开源框架。Hadoop 被设计成可以从一台主机扩展到数万台。Hadoop 不依赖硬件来达成容错,可在应用层面处理失败。Hadoop 框架由四个模块组成:Hadoop Common、Hadoop 分布式文件系统(HDFS)、Hadoop YARN 及 Hadoop MapReduce。此外,还有一些 Hadoop 相关的项目,包括  ZooKeeper  和  Spark

细节

如果你试图创建多节点集群用于在 Docker 中运行 Hadoop,你可能会碰到一些麻烦。容器间网络可通过 Weave 或 SequenceIQ 的新项目  Cloudbreak  来构建。Cloudbreak 可以很容易地在不同的云供应商(比如 AWS)上创建 Hadoop 集群。

用户还遇到过在 Hadoop 中运行  pyspark (Python 中使用的一个Spark编程模型)的困难。尝试以非 root 用户保存数据帧(dataframe)会失败。重置  $SPARK_USER  为 root 也无事于补,因为 spark 子节点都是作为 root 运行的。如果你的项目不需要权限系统,可使用 用户邮件列表的这个方式 来解决。

MAVEN

Apache Maven 是个围绕“项目对象模型”(Project Object Model,简称 POM)概念的软件项目管理工具。Maven 据此从一个中央信息源来管理项目的构建、文档或报告。Maven 还提供了开发期工具,提供项目的邮件列表、代码控制器的变更日志、依赖列表或单元测试报告。

细节

在运行 Maven 的 Docker 插件时,有个 错误 :如果用户没有指定命令,一个空的  CMD  会被输出。对于那些想让容器继承父容器的信息的用户而言,会很受挫。使用官方 Docker 镜像可缓解这些问题。

如果你的服务器运行着 Jenkins,用于创建发布版或快照的设置选项在处理  mvn  命令的 Docker 参数时很快会变成一个麻烦。 Jenkins 的 Maven 发布插件 会自动配置  pom.xml  并部署快照。

GLASSFISH

Glassfish 是个开源应用服务器,支持 EJB、JPA、JSF、JMI、JSP 等等。Glassfish 让开发人员能够创建可扩展、可移植并可与传统技术整合的应用。用户可以安装附加组件以访问其他服务。

Glassfish 在 Docker Hub 中为想尝试新功能的开发人员提供了两个额外镜像: Nightly 和 Ozark 。Ozark 包含了运行 Glassfight 4.1 的 MVC 1.0,用于支持 Java EE 8。

细节

GlassFish 目前存在一个涉及 域受损 的问题。如果用户删除  glassfish/domain/domains  目录就会出错。试图这么做后,文件会像被锁定了一样无法被删除,即便是在容器中重新安装一份全新的 GlassFish 4.1 也无济于事。已经有些解决这一问题的方案被公布出来。最常见的是  Github上这一问题的解决方法 :将无法被删除的结构上移一层,然后删除它。

结语

本文中,我们介绍了这五个镜像:
  • Stash 为开发团队提供了代码管理、对等审核以及流线型工作流来管理 Git 仓库。
  • Tomcat 提供了一个轻量的 HTTP 环境来编译代码,节约了运行多个虚拟机实例所需的系统资源。
  • Hadoop 是一个很容易在应用的所有实例中分布处理大量数据的框架。
  • Maven 通过自动化处理应用的所有实例来管理项目构建过程。
  • Glassfish 允许开发人员使用 Java EE,并与传统应用整合。

这些是 Docker Hub 上 Java 应用和 DevOps 工具的很好示例,你可将其与 Docker 联合来提升工作流程、项目管道以及项目的可扩展性。

原文链接:Ready-made Java-based Containers, Part One(翻译:梁晓勇

原文发布时间为:2015-09-28
本文作者:sean
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:五个基于Java的Docker镜像
目录
相关文章
|
14天前
|
Docker 容器
【Docker】掌握 Docker 镜像操作:从基础到进阶
【Docker】掌握 Docker 镜像操作:从基础到进阶
|
2天前
|
存储 安全 持续交付
【Docker 专栏】Docker 镜像的版本控制与管理
【5月更文挑战第9天】本文探讨了Docker镜像版本控制与管理的重要性,包括可重复性、回滚能力、协作开发和持续集成。常用方法有标签、构建参数和版本控制系统。管理策略涉及定期清理、分层管理和镜像仓库。语义化标签、环境变量和配置文件在版本控制中有应用。版本系统与Docker结合能跟踪历史和促进协作。注意点包括优化镜像大小、确保安全性和兼容性。案例分析和未来趋势展示了持续发展的镜像管理技术,为Docker应用的稳定与进步保驾护航。
【Docker 专栏】Docker 镜像的版本控制与管理
|
11天前
|
Docker 容器
docker从指定repo拉取镜像
docker从指定repo拉取镜像
|
2天前
|
运维 安全 Docker
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
【5月更文挑战第9天】Docker技术在软件开发和部署中带来便利,但其镜像安全问题不容忽视。本文探讨了Docker镜像安全扫描与漏洞修复,强调了镜像安全对应用和系统的重要性。文中介绍了静态和动态扫描方法,列举了软件漏洞、配置漏洞和恶意软件等常见安全问题,并提到了Clair和Trivy等扫描工具。修复策略包括更新软件、调整配置和重建镜像。此外,加强安全意识、规范镜像制作流程和定期扫描是管理建议。未来,将持续面对新的安全挑战,需持续研究和完善安全技术。
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
|
3天前
|
Java Linux 数据安全/隐私保护
Docker自定义JDK镜像并拉取至阿里云镜像仓库全攻略
Docker自定义JDK镜像并拉取至阿里云镜像仓库全攻略
|
3天前
|
存储 弹性计算 运维
Docker数据集与自定义镜像:构建高效容器的关键要素
Docker数据集与自定义镜像:构建高效容器的关键要素
|
3天前
|
Kubernetes Java 调度
Java容器技术:Docker与Kubernetes
Java容器技术:Docker与Kubernetes
13 0
|
3天前
|
存储 缓存 运维
【Docker 专栏】Docker 镜像的分层存储与缓存机制
【5月更文挑战第8天】Docker 镜像采用分层存储,减少空间占用并提升构建效率。每个镜像由多个层组成,共享基础层(如 Ubuntu)和应用层。缓存机制加速构建和运行,通过检查已有层来避免重复操作。有效管理缓存,如清理无用缓存和控制大小,可优化性能。分层和缓存带来资源高效利用、快速构建和灵活管理,但也面临缓存失效和层管理挑战。理解这一机制对开发者和运维至关重要。
【Docker 专栏】Docker 镜像的分层存储与缓存机制
|
3天前
|
数据库 Docker 容器
【Docker 专栏】使用 Dockerfile 自动化构建 Docker 镜像
【5月更文挑战第8天】Dockerfile是构建Docker镜像的关键,它包含一系列指令,用于描述应用运行环境及所需软件包。通过自动化构建,能提高效率、保证可重复性并提升灵活性。确定基础镜像、安装依赖、设置环境后,执行Dockerfile生成镜像,用于应用程序部署。虽然需要熟悉Docker技术和应用细节,但其带来的益处使其成为现代软件开发和部署的重要工具。
【Docker 专栏】使用 Dockerfile 自动化构建 Docker 镜像
|
4天前
|
缓存 安全 数据安全/隐私保护
【Docker专栏】深入理解Docker镜像的构建与推送
【5月更文挑战第7天】本文介绍了Docker镜像的核心作用及基础概念,包括镜像作为容器模板的特性。文章详细阐述了Dockerfile的编写,例如设置基础镜像、工作目录、安装依赖及定义启动命令。通过`docker build`命令构建镜像,并提示了优化构建过程的技巧。此外,还讲解了如何将镜像推送到远程仓库,包括选择仓库、认证、标签和推送镜像的步骤,以及镜像安全性的考虑,如扫描漏洞和遵循最小权限原则。本文旨在帮助读者掌握Docker镜像的构建与推送,以高效管理容器化应用。
【Docker专栏】深入理解Docker镜像的构建与推送