使用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以改善您的应用程序。

相关文章
|
12小时前
|
Java 编译器 开发者
Java一分钟之-Java注解的理解与应用
【5月更文挑战第12天】本文介绍了Java注解的基础知识和常见应用,包括定义、应用和解析注解。注解在编译检查、框架集成和代码生成等方面发挥重要作用。文章讨论了两个易错点:混淆保留策略和注解参数类型限制,并提供了避免策略。提醒开发者避免过度使用注解,以保持代码清晰。理解并恰当使用注解能提升代码质量。
10 3
|
1天前
|
移动开发 前端开发 Java
第一次用java17记录运行ruoyi-vue-plus5.X版本
第一次用java17记录运行ruoyi-vue-plus5.X版本
|
1天前
|
前端开发 Java 应用服务中间件
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
|
2天前
|
NoSQL Redis Docker
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
12 0
|
3天前
|
Java Linux C语言
一步带你了解java程序逻辑控制
一步带你了解java程序逻辑控制
11 2
|
3天前
|
Java 数据安全/隐私保护
java中程序控制的典例
java中程序控制的典例
9 1
|
3天前
|
Java
JDK环境下利用记事本对java文件进行运行编译
JDK环境下利用记事本对java文件进行运行编译
9 0
|
3天前
|
存储 安全 数据安全/隐私保护
【Docker 专栏】Docker 容器化应用的备份与恢复策略
【5月更文挑战第9天】本文探讨了Docker容器化应用的备份与恢复策略,强调了备份在数据保护、业务连续性和合规要求中的关键作用。内容涵盖备份的重要性、内容及方法,推荐了Docker自带工具和第三方工具如Portainer、Velero。制定了备份策略,包括频率、存储位置和保留期限,并详细阐述了恢复流程及注意事项。文章还提及案例分析和未来发展趋势,强调了随着技术发展,备份与恢复策略将持续演进,以应对数字化时代的挑战。
【Docker 专栏】Docker 容器化应用的备份与恢复策略
|
3天前
|
监控 Kubernetes Docker
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
【5月更文挑战第9天】本文探讨了Docker容器中应用的健康检查与自动恢复,强调其对应用稳定性和系统性能的重要性。健康检查包括进程、端口和应用特定检查,而自动恢复则涉及重启容器和重新部署。Docker原生及第三方工具(如Kubernetes)提供了相关功能。配置检查需考虑检查频率、应用特性和监控告警。案例分析展示了实际操作,未来发展趋势将趋向更智能和高效的检查恢复机制。
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
|
3天前
|
存储 安全 数据库
【Docker 专栏】Docker 容器内应用的状态持久化
【5月更文挑战第9天】本文探讨了Docker容器中应用状态持久化的重要性,包括数据保护、应用可用性和历史记录保存。主要持久化方法有数据卷、绑定挂载和外部存储服务。数据卷是推荐手段,可通过`docker volume create`命令创建并挂载。绑定挂载需注意权限和路径一致性。利用外部存储如数据库和云服务可应对复杂需求。最佳实践包括规划存储策略、定期备份和测试验证。随着技术发展,未来将有更智能的持久化解决方案。
【Docker 专栏】Docker 容器内应用的状态持久化