使用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以改善您的应用程序。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
从构建分布式秒杀系统聊聊Disruptor高性能队列
前言 秒杀架构持续优化中,基于自身认知不足之处在所难免,也请大家指正,共同进步。文章标题来自码友的建议,希望可以把阻塞队列ArrayBlockingQueue这个队列替换成Disruptor,由于之前曾接触过这个东西,听说很不错,正好借此机会整合进来。 简介 LMAX Disruptor是一个高性能的线程间消息库。它源于LMAX对并发性,性能和非阻塞算法的研究,如今构成了Exchange基础架构的核心部分。 Disruptor它是一个开源的并发框架,并获得2011 Duke’s 程序框架创新奖,能够在无锁的情况下实现网络的Queue并发操作。 Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式的实现,或者事件监听模式的实现。 在这里你可以跟BlockingQueue队列作比对,简单的理解为它是一种高效的"生产者-消费者"模型,先了解后深入底层原理。 核心 写代码案例之前,大家最好先了解 Disruptor 的核心概念,至少知道它是如何运作的。 Ring Buffer如其名,环形的缓冲区。曾经 RingBuffer 是 ...
- 下一篇
jQuery案例demo -- 鼠标移入显示蒙版
效果展示 效果展示.png HTML代码: <ul id="fourth_tab"> <li> <img src="img/camera_green.png" alt="绿色相机" class="camera"> <p class="title"><span>摄影小白成长记</span></p> <p>The best preparation for tomorrow is doing your best today.</p> </li> <li style="background-color: red"> <div class="show_more"><a href="html/test.html">点击查看更多</a></div> <img src="img/bus.webp" alt="公交车"> </li> <li style="background-color: red...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7