当前位置: 首页 > article >正文

docker部署jar包的几种方式

docker部署jar包的几种方式前言使用Dockerfile手动打包jarDockerfile可复用容器jdk镜像直接创建可复用容器maven插件打包maven打包自动推送镜像到指定服务器关于docker容器启动后注册到nacos的ip是docker容器ip问题总结前言简单记录一下docker打包jar部署的几种方式避免以后忘记使用Dockerfile手动打包jardocker安装和使用基础看这里manjaro安装docker及基本命令dokcer系列一我这里就用前几天写的SpringCloudAlibabaDemo做演示吧需要演示工程的看这里SpringCloudAlibaba项目搭建nacosgatewayuser模块已久打包成jar了如下把jar上传到你的服务器我这里就在本机演示直接cp到/opt/java_app_docker目录下在相同目录下创建DockerfilesudovimDockerfile然后输入:# 拉取jdk8作为基础镜像FROM java:8# 作者MAINTAINER zbdemozbdemo163.com# 添加jar到镜像并命名为user.jarADD user-0.0.1-SNAPSHOT.jar user.jar# 镜像启动后暴露的端口EXPOSE8001# jar运行命令参数使用逗号隔开ENTRYPOINT[java,-jar,user.jar]然后使用docker命令打包dockerbuild-tuser.user表示镜像名称最后的.表示Dockerfile在当前目录打包完成后使用docker images查看镜像使用docker run命令创建并运行容器dockerrun-d--nameuser-p8001:8001 user命令解释如下命令功能docker run创建并启动容器–name指定一个容器名称-d后台运行容器并返回容器ID-p指定端口user需要启动的镜像名称版本不指定版本默认最新版本符号左边为宿主机右边为容器空间启动完成,查看启动日志dockerlogs-f-tuserjar日志启动成功查看容器dockerps访问一下测试效果:localhost:8001/hello/hello没错手动docker打包jar镜像并运行完成了但是这样搞就显得有点呆还不如直接java -jar运行呢操作这么麻烦每次更新还要删除容器删除镜像重新创建而且日志文件等重要信息也会丢失当然如果你使用jenkins等shell自动化的工具当我没说Dockerfile可复用容器首先停止并删除刚刚创建的容器和镜像停止容器dockerstop user删除容器dockerrmuser删除镜像dockerrmi user修改Dockerfile文件sudovimDockerfile修改后内容如下(给jar安排了一个目录方便挂载到宿主机)# 拉取jdk8作为基础镜像FROM java:8# 作者MAINTAINER zbdemozbdemo163.com# 添加jar到镜像并命名为user.jarADD user-0.0.1-SNAPSHOT.jar /app/user.jar# 镜像启动后暴露的端口EXPOSE8001# jar运行命令参数使用逗号隔开ENTRYPOINT[java,-jar,/app/user.jar]然后在/opt/java_app_docker文件夹下面创建jar挂载目录sudo mkdir app把你的jar包cp一份到宿主机/opt/java_app_docker/app目录下并改名为user.jar 这里一定要在app目录下存放你的jar,不然容器启动会失败找不到jar打包镜像-创建并运行容器打包镜像dockerbuild-tuser.创建并运行容器dockerrun-d--nameuser-p8001:8001-v/opt/java_app_docker/app:/app user命令解释如下命令功能docker run创建并启动容器–name指定一个容器名称-d后台运行容器并返回容器ID-p指定端口user需要启动的镜像名称版本不指定版本默认最新版本-v挂载目录到宿主机符号左边为宿主机右边为容器空间这样的方式启动完成之后更新服务时只需要更换宿主机/opt/java_app_docker/app目录下的jar包然后重启容器即可实现更新省略了每次更新删除打包创建等过程jdk镜像直接创建可复用容器上面的方式在单应用情况下是可行的但是如果我是微服务架构呢比如现在我要部署我的gateway网关服务是不是还要重新走一遍流程很呆首先停止并删除刚刚创建的容器和镜像停止容器dockerstop user删除容器dockerrmuser删除镜像dockerrmi user查看jdk版本dockerimages我这里是openjdk8创建并运行容器直接基于jdk镜像创建容器dockerrun-d--nameuser-p8001:8001-v/opt/java_app_docker/app:/app java:8 /usr/bin/java-jar/app/user.jar或者启动方式取决于jdk版本dockerrun-d--nameuser-p8001:8001-v/opt/java_app_docker/app:/app openjdk:8java-jar/app/user.jar命令解释如下命令功能docker run创建并启动容器–name指定一个容器名称-d后台运行容器并返回容器ID-p指定端口-v挂载目录到宿主机java:8需要启动的镜像名称版本不指定版本默认最新版本/usr/bin/java -jar /app/user.jarjar启动命令及jar所在位置因为创建的容器挂在了宿主机/opt/java_app_docker/app目录所以里面映射了我们上面放进去的user.jar符号左边为宿主机右边为容器空间这样的方式省略了创建Dockerfile并把jar打包成镜像的操作无论多少个服务只要有jdk镜像一条命令搞定比如现在我需要增加gateway服务那就把gateway.jar放在任意目录下直接执行docker run -d --name user -p ${任意外部端口}{任意容器端口} -v ${你的gateway.jar存放目录}:/${任意容器内目录名称} java:8 /usr/bin/java -jar /${任意容器内目录名称}/gateway.jar这种方式也是直接替换挂载目录下jar,然后docker restart 容器ID or 名称就行maven插件打包为什么不推荐呢首先是maven插件直接打包docker镜像的方式污染工程反正就很奇怪的感觉其次你的项目是要发布生产环境的直接打包镜像给运维太卷了吧所以综上所属我就简单介绍下pom添加docker打包方式!--docker 镜像插件--buildpluginsplugingroupIdcom.spotify/groupIdartifactIddocker-maven-plugin/artifactIdversion1.2.2/versionconfigurationimageName${project.artifactId}/imageNamedockerDirectorysrc/main/docker/dockerDirectoryresourcesresourcetargetPath//targetPathdirectory${project.build.directory}/directoryinclude${project.build.finalName}.jar/include/resource/resources/configuration/plugin/plugins/build创建Dockerfile文件内容如下# 基础镜像使用javaFROM java:8# 作者MAINTAINER zbdemo# 将jar包添加到容器中并更名为app.jarADD gateway-0.0.1-SNAPSHOT.jar gateway.jar EXPOSE8000ENTRYPOINT[java,-jar,gateway.jar]命令方式打包mvn package-Dmaven.test.skiptrue docker:build本机docker保存镜像到本地dockerdockersave-o/gateway.jar gateway查看镜像dockerimages创建并运行容器dockerrun--namegateway-p8000:8000-dgateway服务器docker或者上传到服务器scp/gateway.jar rootip:/opt/app加载镜像dockerload/opt/app/gateway.jar查看镜像dockerimages创建并运行容器dockerrun--namegateway-p8000:8000-dgateway.tar或者这样打包推送maven打包自动推送镜像到指定服务器准备工作开启服务器的docker远程访问权限自行百度反正我不想这样玩pom修改如下!--docker 镜像插件--buildpluginsplugingroupIdcom.spotify/groupIdartifactIddocker-maven-plugin/artifactIdversion1.2.2/versionconfigurationimageName${project.artifactId}/imageNamedockerDirectorysrc/main/docker/dockerDirectory!-- docker容器地址 --dockerHosthttp://192.168.101.1:2375/dockerHostresourcesresourcetargetPath//targetPathdirectory${project.build.directory}/directoryinclude${project.build.finalName}.jar/include/resource/resources/configuration/plugin/plugins/build/project打包mvn package-Dmaven.test.skiptrue docker:build或者关于docker容器启动后注册到nacos的ip是docker容器ip问题1.可以在docker run的时候加–networkhost参数解决主机网络模式这个时候我们无需-p 80:80指定服务端口运行因为–networkhost模式会使用服务本身启用的端口。2.容器创建启动时动态指定ip和端口-Dspring.cloud.nacos.discovery.ipxx -Dspring.cloud.nacos.discovery.portxxx或者在yaml配置文件配置spring:cloud:nacos:discovery:ip:xxport:xx总结感谢大佬参考地址地址1地址2

相关文章:

docker部署jar包的几种方式

docker部署jar包的几种方式前言使用Dockerfile手动打包jarDockerfile可复用容器jdk镜像直接创建可复用容器maven插件打包maven打包自动推送镜像到指定服务器关于docker容器启动后注册到nacos的ip是docker容器ip问题!总结前言 简单记录一下docker打包jar部署的几种方…...

Linux配置静态ip地址和Oracle VM VirtualBox导入/导出虚拟机Centos7

导入虚拟机选择管理 - 导入虚拟电脑找到自己的虚拟机位置修改内存大小,默认虚拟机电脑位置,MAC地址等导入后点击设置如下图:修改网络-网 -- 卡1,其他基本不需要修改桥接网络选好网卡接入网线;设置好网络以后使用命令重…...

Kindle漫画转换终极方案:如何解决电子阅读器上的格式兼容性问题

Kindle漫画转换终极方案:如何解决电子阅读器上的格式兼容性问题 【免费下载链接】kcc KCC (a.k.a. Kindle Comic Converter) is a comic and manga converter for ebook readers. 项目地址: https://gitcode.com/gh_mirrors/kc/kcc 你是否曾经尝试在Kindle上…...

Wan2.1 VAE与微信小程序开发结合:打造个人AI头像生成工具

Wan2.1 VAE与微信小程序开发结合:打造个人AI头像生成工具 你有没有想过,用一张自己的照片,就能快速生成几十种不同风格的艺术头像?无论是动漫风、油画感,还是赛博朋克,都能一键搞定。以前这可能需要专业的…...

ExcelDataReader实战指南:高效处理Excel文件3步法掌握跨格式解析

ExcelDataReader实战指南:高效处理Excel文件3步法掌握跨格式解析 【免费下载链接】ExcelDataReader Lightweight and fast library written in C# for reading Microsoft Excel files 项目地址: https://gitcode.com/gh_mirrors/ex/ExcelDataReader ExcelDat…...

技术揭秘:QtScrcpy如何实现跨平台Android投屏与低延迟控制

技术揭秘:QtScrcpy如何实现跨平台Android投屏与低延迟控制 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScr…...

一键搭建AI对话系统:通义千问1.5-1.8B-Chat-GPTQ-Int4镜像使用指南

一键搭建AI对话系统:通义千问1.5-1.8B-Chat-GPTQ-Int4镜像使用指南 想快速拥有一个属于自己的AI对话助手吗?今天要介绍的这个方法,可能比你想象中简单得多。不用折腾复杂的模型下载,不用配置繁琐的运行环境,更不用写一…...

ResNet50人脸重建作品集:cv_resnet50_face-reconstruction在艺术创作中的人脸风格迁移底图生成

ResNet50人脸重建作品集:cv_resnet50_face-reconstruction在艺术创作中的人脸风格迁移底图生成 1. 项目介绍与核心价值 cv_resnet50_face-reconstruction 是一个基于ResNet50架构的人脸重建项目,专门为艺术创作和设计工作提供高质量的人脸底图生成服务…...

掌握TegraRcmGUI:从入门到精通的Switch注入实践指南

掌握TegraRcmGUI:从入门到精通的Switch注入实践指南 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI TegraRcmGUI是一款基于C开发的图形化界面工具…...

PHY芯片寄存器设计揭秘:从5位地址到分页扩展的演进史

PHY芯片寄存器设计演进:从5位地址到分页扩展的技术革命 当我们在享受千兆以太网带来的高速数据传输时,很少有人会想到这背后隐藏着一场持续了数十年的寄存器架构演进。PHY芯片作为网络通信的物理层核心,其寄存器设计经历了从简单固定到复杂可…...

郭老师-我们为什么要爱国?

我们为什么要爱国? ——因为家在,根在,魂在“你可以不爱你的管家, 但必须爱你家的房子。”🌿 国家如屋,人民为主, 执政者不过管家—— 而这屋,是我们的命脉所系。🏠 一、…...

技术速递|6000 万次 Copilot 代码审查 且仍在持续增长

作者:Ria Gopu & David Apirian排版:Alan WangCopilot 代码审查如何帮助团队跟上 AI 加速带来的代码变更。自去年 4 月我们首次推出 Copilot 代码审查(CCR)以来,其使用量已增长了 10 倍,目前已占 GitHu…...

5步释放游戏潜能:面向玩家的原神帧率解锁完全指南

5步释放游戏潜能:面向玩家的原神帧率解锁完全指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 一、问题发现:为什么你的高端显卡在原神中无法全力奔跑&#xf…...

为什么Python社区推荐用pipx替代pip?以virtualenv安装为例演示工作流

为什么Python开发者应该用pipx替代pip?以virtualenv为例的完整隔离方案 当你在Ubuntu终端输入pip install virtualenv时,那个刺眼的externally-managed-environment错误提示就像一堵墙——这不是技术故障,而是Python生态进化的重要路标。传统…...

OpenClaw开源项目深度体验:对比其与星图GPU平台Qwen3-14B-Int4-AWQ部署差异

OpenClaw开源项目深度体验:对比其与星图GPU平台Qwen3-14B-Int4-AWQ部署差异 1. 项目概览与核心功能 OpenClaw是近期备受关注的开源大模型项目,主打轻量化和易部署特性。它采用混合专家架构(MoE),在保持模型性能的同时显著降低了计算资源需求…...

Kettle转换里‘阻塞数据’控件为啥不灵?我用这个真实ETL案例给你讲透

Kettle转换中‘阻塞数据’控件的实战解析:从失效到精准控制 在ETL工具Kettle的实际应用中,数据流的精确控制往往是决定任务成败的关键。许多中高级用户在使用"阻塞数据直到步骤都完成"控件时,都曾遇到过看似配置正确却无法生效的困…...

Heritrix3源码深度解析:从CrawlURI到ProcessorChain的执行流程

Heritrix3源码深度解析:从CrawlURI到ProcessorChain的执行流程 【免费下载链接】heritrix3 Heritrix is the Internet Archives open-source, extensible, web-scale, archival-quality web crawler project. 项目地址: https://gitcode.com/gh_mirrors/he/herit…...

10分钟搞定 Nginx 安装:Linux/Windows 双平台实测(附避坑指南)

一、前言上一篇我们初识了Nginx——知道了它是高性能的HTTP和反向代理服务器,懂了它为什么被99%的互联网公司青睐,也明确了我们后续的学习路线。本篇文章将手把手教你在Linux和Windows系统上,完成Nginx的安装、部署、启动、停止 ,…...

Open UI5 源代码解析之735:DynamicPageAccessibleLandmarkInfo.js

源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.f\src\sap\f\DynamicPageAccessibleLandmarkInfo.js DynamicPageAccessibleLandmarkInfo 文件深度解析 文件定位与总体判断 当前分析对象位于 src/sap.f/src/sap/f/DynamicPageAccessibleLandmarkInfo.j…...

51单片机学习(五)数码管显示

如有大佬发现我文章里的错误,希望多多指出,或者有缺少的也欢迎告诉我,我会尽快补充上去的,感谢各位的支持,要互三的d我哦!一.数码管数码管显示屏和U4 74HC245U574H138译码器一位数码管引脚定义一个数码管由…...

保姆级教程:在OBBDetection项目中为DOTA数据集定制检测结果可视化(mmdetection 2.2)

深度定制OBBDetection检测结果可视化:DOTA数据集高级实践指南 在旋转目标检测领域,DOTA数据集因其复杂的航拍场景和多角度目标特性,对结果可视化提出了独特挑战。本文将带您从零构建一套完整的可视化解决方案,涵盖从基础配置到高级…...

Open UI5 源代码解析之736:CardBase.js

源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.f\src\sap\f\CardBase.js CardBase.js 深度解析:在 OpenUI5 中承上启下的卡片基座 文件定位与整体判断 CardBase.js 位于 sap.f 库下,它不是面向业务开发者直接频繁实例化的组件,而是一个被多种卡片实…...

从MATLAB验证到FPGA上板:双频信号叠加的完整开发闭环实战

从MATLAB验证到FPGA上板:双频信号叠加的完整开发闭环实战 在数字信号处理领域,实现双频信号的精确叠加是一个常见但极具挑战性的任务。无论是通信系统中的载波调制,还是音频处理中的音效合成,都需要工程师能够准确地在硬件层面实现…...

终极指南:如何用btcrecover找回你忘记的比特币钱包密码 [特殊字符]️

终极指南:如何用btcrecover找回你忘记的比特币钱包密码 🗝️ 【免费下载链接】btcrecover An open source Bitcoin wallet password and seed recovery tool designed for the case where you already know most of your password/seed, but need assist…...

实战指南:基于快马平台,快速构建可部署的unet卫星图像分割系统

今天想和大家分享一个实战项目:基于UNet的卫星图像建筑物分割系统。这个项目特别适合在InsCode(快马)平台上快速搭建,因为它涉及从数据处理到模型部署的完整流程,而平台的一键部署功能正好能省去繁琐的环境配置工作。 项目背景与需求分析 卫星…...

Kazumi WebDAV同步功能详解:实现跨设备番剧数据互通的无缝体验

Kazumi WebDAV同步功能详解:实现跨设备番剧数据互通的无缝体验 【免费下载链接】Kazumi 基于自定义规则的番剧采集APP,支持流媒体在线观看,支持弹幕,支持实时超分辨率。 项目地址: https://gitcode.com/gh_mirrors/ka/Kazumi …...

从安防摄像头到直播:手把手教你用ZLMediaKit搭建GB28181视频监控平台

从安防摄像头到直播:手把手教你用ZLMediaKit搭建GB28181视频监控平台 在智能安防和物联网快速发展的今天,视频监控系统的网络化和智能化已成为行业标配。GB28181作为国内视频监控领域的国家标准协议,实现了不同厂商设备间的互联互通。而ZLMed…...

Shiny框架终极指南:输入控件与输出渲染的完美交互原理

Shiny框架终极指南:输入控件与输出渲染的完美交互原理 【免费下载链接】shiny Easy interactive web applications with R 项目地址: https://gitcode.com/gh_mirrors/sh/shiny Shiny是R语言生态中一款强大的交互式Web应用框架,它让数据科学家和分…...

MedGemma-X精彩案例分享:自然语言提问触发的专业级影像分析报告

MedGemma-X精彩案例分享:自然语言提问触发的专业级影像分析报告 1. 重新定义智能影像诊断的新标杆 想象一下这样的场景:一位放射科医生面对堆积如山的X光片,只需要用自然语言问一句"这张胸片有没有肺炎迹象?"&#xf…...

cobalt数据库设计解析:如何平衡性能与数据完整性

cobalt数据库设计解析:如何平衡性能与数据完整性 【免费下载链接】cobalt best way to save what you love 项目地址: https://gitcode.com/GitHub_Trending/cob/cobalt 引言:数据库设计的永恒矛盾 在软件开发领域,数据库设计始终面临…...