使用Docker运行Java应用程序

简介: 使用Docker运行Java应用程序 部署软件混乱; 需要克服许多问题才能生成顺畅且无痛的部署过程。诸如环境设置,依赖性地狱,编排管理以及系统可用性等问题是部署新应用程序时遇到的许多问题中的一小部分。

使用Docker运行Java应用程序

部署软件混乱; 需要克服许多问题才能生成顺畅且无痛的部署过程。诸如环境设置,依赖性地狱,编排管理以及系统可用性等问题是部署新应用程序时遇到的许多问题中的一小部分。

Docker可以给我们一种打破依赖性地狱问题的方法,也就是说,如果两个应用程序依赖于两个不同的Java版本,并且它们必须在同一主机上运行,​​那么将它们隔离到它们自己的docker环境中可能会有所帮助。Docker也可以用来声明性地构建你的依赖环境,能够运行你的应用程序并与外部世界进行通信。 

Docker使用容器的想法。容器与虚拟机(VM)类似。但是,在虚拟机将自己隔离到拥有自己的操作系统时,容器将共享操作系统内核和其他主机资源。容器是轻量级的,并且允许应用程序在具有通用交互点集的任何主机上运行,​​从而可以轻松地复制和缩放应用程序。 

安装Docker

Docker在你的操作系统上运行一个守护进程。守护进程将成为当前主机或安装了docker的虚拟机上所有容器的编排器。 

Docker适用于所有主要的操作系统发行版。如果运行Windows 10,则可以运行Docker for Windows。如果您运行的Windows版本低于Windows 10,那么您将不得不运行Docker Toolbox软件。Docker for Mac适用于Mac用户。 

由于其在服务器和云架构中的普遍使用,Docker专为Linux发行版而构建。因此,docker可以在Linux上本地运行。 

使用Spring Boot创建简单的Java应用程序

为了演示运行Java应用程序的docker的使用,我们将使用Spring Boot框架创建一个简单的应用程序 。然后,我们将采用此应用程序,并将其封装在码头图像中 - 码头图像是我们软件的预建版本。然后,我们可以获取此泊坞窗图像,并在泊坞窗容器中运行它,并准备部署和扩展应用程序。 

这是一个非常基本的程序,它将在访问url'/ hello-world'时打印hello world: 

打包你好;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableAutoConfiguration
公开课你好{

   @RequestMapping( “/你好世界”)
   String home(){
       返回“Hello World!”;
   }

   公共静态无效的主要(字符串[]参数)抛出异常{
       SpringApplication.run(Hello.class,args);
   }
}

这里没有什么特别之处,它是一个简单的应用程序,将用于演示如何轻松地使用docker打包并孤立运行。

在我的开发机器上,我可以使用maven构建我的应用程序,并在命令行上运行以下命令: 

mvn clean package

这将为我生成一个.jar文件,然后我可以导航到并使用本地java运行安装在我的机器上:

java -jar target / hello-world.jar

这些都是手动完成的。但是,您可以构建一个Docker镜像,让您可以在任何地方运行应用程序,而无需本地安装Java。你甚至可以使用docker来构建你的应用程序,使用一个预装maven的docker镜像,让你无需原生安装maven。 

Docker允许您避开开发环境与生产环境略有不同的问题。许多错误可以从生产和开发机器之间环境设置的细微差异开始,这可能导致数小时的挫折; 码头工可以帮助您避免这种沮丧。 

创建你的第一个Dockerfile

要使用docker运行应用程序,您需要一个运行版本为java的docker镜像。Docker Hub提供大量预制图像供大众使用。事实证明,已经有一个可用的图像,可以让你运行一个安装了java的容器。然后,我们可以使用这个图像来运行你的Java应用程序。 

下面是一个自定义dockerfile的例子,它可以通过我们的spring应用程序实现: 

FROM anapsix / alpine-java:最新的

COPY hello-world.jar /

EXPOSE 8080

CMD java -jar hello-world.jar

我们将这个文件命名为Dockerfile,然后我们将使用以下命令从它构建一个图像: 

docker build -t hello-world-img。

命令末尾的点很重要,因为它表示在当前位置使用已声明的dockerfile(docker守护进程默认为查找名为Dockerfile的文件)。然后,我们可以运行: 

docker images

以显示我们有一个名为hello-world-img的可用图像。 

运行你的新Docker镜像

在容器中运行docker镜像很简单。通过执行以下命令来运行映像: 

docker run -d -p 8080:8080 hello-world-img

这将启动hello-world-img容器,随后启动spring引导应用程序,将容器的8080端口绑定到我们的主机'8080端口。 

我们现在可以导航到 http:// localhost:8080 / hello-world并查看终点输出的预期响应。 

结论
使用Docker运行Java应用程序可以帮助您实现更接近全自动化的部署机制。您可以设想采用显示的命令,并将它们作为持续集成管道的一部分运行。然后,该管道可以构建,打包,部署和运行以docker作为驱动力的所有应用程序。Docker容器是轻量级的,易于部署,并且可以阻止你遇到“它在我的环境中工作”这个着名的问题。节省自己的环境问题,并开始学习Docker以改善您的应用程序。

相关文章
|
2天前
|
设计模式 Java API
Java 可扩展 API 设计:打造灵活的应用架构
【4月更文挑战第27天】设计可扩展的 API 是构建灵活、易于维护的应用程序架构的关键。Java 提供了丰富的工具和技术来实现这一目标,使开发者能够构建具有高度可扩展性的应用程序。
19 4
|
3天前
|
Java
【专栏】Java中的反射机制与应用实例
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
|
20小时前
|
存储 Java 开发工具
【Java探索之旅】用面向对象的思维构建程序世界
【Java探索之旅】用面向对象的思维构建程序世界
9 0
|
21小时前
|
小程序 Java 程序员
【Java探索之旅】我与Java的初相识(二):程序结构与运行关系和JDK,JRE,JVM的关系
【Java探索之旅】我与Java的初相识(二):程序结构与运行关系和JDK,JRE,JVM的关系
9 0
|
22小时前
|
Java
Java中的条件语句结构在编程中的应用
Java中的条件语句结构在编程中的应用
4 0
|
1天前
|
敏捷开发 机器学习/深度学习 Java
Java中的异常处理机制深入理解与实践:持续集成在软件测试中的应用探索自动化测试在敏捷开发中的关键作用
【4月更文挑战第29天】在Java编程中,异常处理是一个重要的概念。它允许开发者在程序执行过程中遇到错误或异常情况时,能够捕获并处理这些异常,从而保证程序的稳定运行。本文将详细介绍Java中的异常处理机制,包括异常的分类、异常的处理方式以及自定义异常等内容。 【4月更文挑战第29天】 随着敏捷开发和DevOps文化的兴起,持续集成(CI)已成为现代软件开发周期中不可或缺的一环。本文将探讨持续集成在软件测试领域内的关键作用、实施策略以及面临的挑战。通过对自动化构建、测试用例管理、及时反馈等核心要素的详细分析,揭示持续集成如何提高软件质量和加速交付过程。 【4月更文挑战第29天】 在当今快速发
|
1天前
|
数据采集 存储 前端开发
Nutch库入门指南:利用Java编写采集程序,快速抓取北京车展重点车型
2024年北京车展凸显电动车全球热度,中国引领市场,展出117台全球首发车,包括30台跨国公司电动车。借助Nutch库抓取汽车网站数据,分析电动车市场趋势。通过配置代理和多线程爬虫,高效收集新车信息,助力理解市场动态,推动可持续交通发展。
Nutch库入门指南:利用Java编写采集程序,快速抓取北京车展重点车型
|
1天前
|
弹性计算 运维 Java
Serverless 应用引擎产品使用之在Serverless 应用引擎中,将 Java 应用从 ECS 迁移到 SAE如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
21 2
|
1天前
|
Java
解决IDEA打开java项目出现橙色j无法运行
解决IDEA打开java项目出现橙色j无法运行
4 0
|
1天前
|
Serverless 应用服务中间件 开发工具
Serverless 应用引擎产品使用之阿里函数计算中,在本地进行调试,并且需要用到Docker如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
11 0