5个构建第一个Java镜像的小窍门

本文讲的是5个构建第一个Java镜像的小窍门【编者的话】Arun Gupta是 《Docker for Java Developers》 一书的作者,本文介绍了构建Java镜像的五个小窍门,从而以超越基本概念和框架的方式开启Docker容器之旅。

如果你是一个热切期待在你的组织内部迁移到容器技术的企业级软件开发人员,那么你会有更多的兴趣来学习Docker背后的基础概念以及围绕Docker的常用的编排框架。在本文中,我将就这些基本概念进行扩展并提供一些简单而使用的小窍门来构建你的第一个使用Java编程语言的Docker镜像。

选择一个小的基础JDK镜像

Docker镜像是通过从Dockerfile读取指令来构建的,在这里你可以发现构建你的第一个镜像的基础指令。

在应用程序中一个常见的包含了JDK的基础镜像是默认的openjdk:latest镜像,这是基于Debian操作系统构建的。该镜像的大小是640.9MB,可以通过运行镜像看到JDK版本:
docker run -it openjdk java -version

如果你想使用Oracle JDK,那么 正常理由 Docker Hub上是没有可用的官方Docker镜像的,所以,你需要下载 Oracle JDK 并打包到镜像里。在 https://github.com/arun-gupta/ ... e-jdk 上有一个可用的简单的展示如何打包Oracle JDK的Dockerfile,以这种方式构建的镜像是536.3MB。

Alpine Linux 是基于 musl libc BusyBox 构建的精简的Linux发行版,Docker Hub上有基于Alpine的OpenJDK镜像,可以以openjdk:alpine下载,这个镜像的大小是144.9MB,这是不到默认的openjdk:latest镜像大小的25%。

为什么说更小的镜像体积很重要呢?这与磁盘空间没有关系,而是一旦容器在不同的宿主机上启动并且镜像需要通过网络下载,那么镜像大小就变得至关重要了。一个更大的镜像也就意味着需要更高的延迟来启动镜像。

同样的,openjdk:8-jre是309MB,而openjdk:8-jre-alpine是107.8MB。
这里我还想提供一些建议。确保选择JDK或者JRE哪一个是合适的基础镜像,这会让你的镜像变小。为了进一步减少体积,你也许可以考虑使用基于Alpine的镜像而不是默认的基于Debian的镜像。如果你想要一个商业版本支持的JDK,那么你也许需要构建你自己的镜像。下面会讨论该镜像需要的底层操作系统。

选择最佳的底层操作系统

通常是从一个底层的操作系统来开始构建一个Docker镜像的,也就是Dockerfile的FROM指令提及的。在某些情况下,你也许会从一个已有的基础镜像开始,这时你已经选择了底层操作系统镜像。但是如果你需要选择一个底层操作系统镜像,那么常用的镜像和对应的大小如下所示:
  • Ubuntu:127.2MB
  • CentOS:196.8MB
  • Debian:123MB
  • Alpine:4.803MB
  • BusyBox:1.093MB

仔细选择你的底层操作系统,因为它将添加到您的镜像里,确保将操作系统更新到发行包的最新版本,同样也包括依赖项。

在某些情况下,您可能需要选择一个商业支持的操作系统。比如Red Hat Enterprise Linux或者Windows Server 2016。这些通常是由供应商提供的。

清理构建上下文

Docker CLI是由给定一个目录或者URL作为构建上下文的,在镜像构建之前会将该上下文发送到Docker Daemon。建议在一个新的目录里创建Dockerfile,然后在该目录里只添加镜像包含的文件。这为docker build命令提供了一个更加清洁的上下文并且允许更快地构建镜像。否则,扫描带有多个文件的目录将不必要地减慢构建速度。

如果无法创建一个新目录或者执行命令的目录里存在着其他文件,那么可以考虑.dockerignore文件,该文件的语法类似于.gitignore文件,允许您从构建中排除一些文件和目录。举例来说,如果Dockerfile放在了Maven工程的根目录里,那么该文件是需要的。然后这个文件可以用来从target目录里指定生成的特定组件。

创建你自己的镜像

你经常需要创建一个镜像,在这里基础镜像会启动一个组件然后你的镜像将对其作配置。举例来说,jboss/wildfly基础镜像将会启动WildFly应用服务器,然后你的镜像会在其中创建一些JDBC资源。另外一个例子就是couchbase镜像启动了Couchbase服务器,在这种情况下,数据库需要对于内存配额、管理凭证和其它选项进行手动配置。一个新的提供了预配置的Couchbase服务器的Docker镜像是非常实用的,这个已经在couchbase/server:sandbox镜像里实现了,该镜像使用了couchbase作为基础镜像,它使用了Couchbase Restful API来配置数据库,正如在Dockerfile中说明的。

调试镜像文件系统陈列

你可能还需要查看容器内的文件系统是如何陈列的,这将主要用于调试目的。

如果容器正在运行,那么你可以使用如下命令来attach到镜像文件系统:
docker exec -it {cid} bash

如果容器没有运行,那么可以使用下面的命令:
docker run -it <image> bash

在这两种情况下,将会使用镜像的文件系统来打开一个Bash Shell,如果需要的话,这会允许你深入容器/镜像文件系统并进行必要的更新。
你是否已经准备好容器化你的第一个Java应用了呢?我的新书 《Docker for Java Developer》 ,解释了如何使用Docker打包、部署和扩展应用,此外,Github上的Docker for Java Developers教程提供了一个自学及动手实验来构建你的第一个Java应用程序。

原文链接:5 simple tips for building your first Docker image with Java (翻译:胡震)

原文发布时间为:2017-01-23

本文作者:胡震

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:5个构建第一个Java镜像的小窍门

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/225211

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。