如何将java项目打包成docker 镜像并且可运行

news/2024/11/16 7:14:29/

java 项目打包成 Docker 可运行的镜像,其目的是便于运用docker容器来管理项目。下面是具体的步骤,如果大家遇到啥问题可以留言有空会逐一回复。

 

目录

1. 确保项目已经打包成 JAR 文件

2. 编写 Dockerfile

3. 构建 Docker 镜像

4. 运行 Docker 容器

5. 验证


1. 确保项目已经打包成 JAR 文件

首先,确保已经使用 Maven 或 Gradle 等工具将项目打包成 JAR 文件。如果使用的是 Maven,可以通过以下命令打包:

mvn clean package

这会在 target/ 目录下生成一个可执行的 JAR 文件。

2. 编写 Dockerfile

在项目的根目录下创建一个 Dockerfile,内容大致如下:

# 使用 OpenJDK 8 基础镜像
FROM openjdk:8-jdk-alpine# 设置工作目录
WORKDIR /app# 将所需文件和文件夹复制到容器的 /app 目录
COPY target/lib /app/lib
COPY target/resources /app/resources
COPY target/monitor-api.jar /app/monitor-api.jar
COPY target/license.json /app/license.json
COPY target/license.md5 /app/license.md5# 设置 Spring Profile 激活 dev 配置
ENV SPRING_PROFILES_ACTIVE=dev# 暴露端口 20001 和 2000
EXPOSE 20001 2000# 启动 JAR 文件
ENTRYPOINT ["java", "-jar", "/app/monitor-api.jar", "--spring.config.name=application-dev"]

FROM openjdk:17-jdk-slim:选择一个合适的 OpenJDK 镜像作为基础镜像。比如openjdk:8-jdk-alpine只是需要确保你的docker里已经有这个image.。如果没有可直接拉去镜像:

docker pull openjdk:8-jdk-alpine

COPY target/your-project-name.jar /app/your-project-name.jar:将打包好的 JAR 文件复制到 Docker 容器中。

ENTRYPOINT ["java", "-jar", "/app/your-project-name.jar"]:设置容器启动时运行的命令,这里是启动 JAR 文件。

EXPOSE 8080:暴露应用的端口,确保容器外部可以访问应用。

3. 构建 Docker 镜像

在项目根目录下,打开终端并运行以下命令构建 Docker 镜像:

docker build -t your-image-name .

 

这将基于 Dockerfile 文件构建镜像,并将其命名为 your-image-name

4. 运行 Docker 容器

构建完成后,可以运行你的 Java 应用容器:

docker run -d -p 8080:8080 your-image-name

5. 验证

现在,你应该可以通过访问 http://localhost:8080 来访问你的 Java 应用。

下面是拓展内容,可各自选择是否使用Multi-stage Build 来优化镜像。比如说有镜像大小限制的可以参考一下进行操作:

# 第一阶段:构建阶段
FROM maven:3.8.6-openjdk-17-slim AS buildWORKDIR /appCOPY pom.xml .
COPY src ./srcRUN mvn clean package -DskipTests# 第二阶段:运行阶段
FROM openjdk:8-jdk-alpineWORKDIR /appCOPY --from=build /app/target/your-project-name.jar .ENTRYPOINT ["java", "-jar", "your-project-name.jar"]
EXPOSE 8080

Maven 和其他构建工具只存在于构建阶段,最终镜像只包含运行 JAR 所需的内容。这样镜像将更加轻量。


http://www.ppmy.cn/news/1547389.html

相关文章

Spring——单元测试

单元测试:JUnit 在之前的测试方法中,几乎都能看到以下的两行代码: ApplicationContext context new ClassPathXmlApplicationContext("xxx.xml"); Xxxx xxx context.getBean(Xxxx.class); 这两行代码的作用是创建Spring容器&a…

微信小程序点击跳转打电话功能

wx.makePhoneCall 属性类型默认值必填说明phoneNumberstring是需要拨打的电话号码successfunction否接口调用成功的回调函数failfunction否接口调用失败的回调函数completefunction否接口调用结束的回调函数&#xff08;调用成功、失败都会执行&#xff09; <view class&q…

【计算机网络】设备网卡NIC的工作内容有哪些呢?

我们平时上网&#xff0c;都需要经过设备网卡的处理&#xff0c;网络接口卡&#xff08;Network Interface Card&#xff0c;简称 NIC&#xff09;是计算机与网络之间的物理连接设备&#xff0c;负责处理网络数据的发送和接收。NIC 的功能涵盖了从物理层到数据链路层的多个方面…

更简单快捷的处理URL参数

在开发前端页面时候&#xff0c;经常会用到跳转页面&#xff0c;在页面进行交互的时候&#xff0c;经常会用到参数携带&#xff0c;我们一般处理方法就是在路由的后面携带我们需要传递的参数。 URL拼接即字符串拼接&#xff0c;在最开始的时候&#xff0c;我们对字符串的拼接都…

js像循环数组那样循环一个数字,Array.from()

Array.from() 是 JavaScript 中的一个静态方法&#xff0c;它可以从类数组对象或可迭代对象中创建一个新的数组实例。这个方法非常有用&#xff0c;尤其是在处理那些不是真正的数组但可以像数组一样访问其元素的对象时。 基本语法 Array.from(arrayLike, mapFn, thisArg) ar…

python程序对服务器cpu和内存资源占用的管理。

背景 在服务器上部署了一套目标检测的程序&#xff0c;做成while true 的轮询检测数据更新的定时任务。 结果没想到那台服务器还有一套可视化程序要给领导演示看&#xff0c;结果演示的时候平台各种报错。 然后通过top查看了一下资源利用率发现python的程序cpu 130。&#xf…

YOLOv11改进,YOLOv11添加GnConv递归门控卷积,二次创新C3k2结构

摘要 视觉 Transformer 在多种任务中取得了显著的成功,这得益于基于点积自注意力的新空间建模机制。视觉 Transformer 中的关键因素——即输入自适应、长距离和高阶空间交互——也可以通过卷积框架高效实现。作者提出了递归门控卷积(Recursive Gated Convolution,简称 gnCo…

大模型研究报告 | 2024年中国金融大模型产业发展洞察报告|附34页PDF文件下载

随着生成算法、预训练模型、多模态数据分析等AI技术的聚集融合&#xff0c;AIGC技术的实践效用迎来了行业级大爆发。通用大模型技术的成熟推动了新一轮行业生产力变革&#xff0c;在投入提升与政策扶植的双重作用下&#xff0c;以大模型技术为底座、结合专业化金融能力的金融大…