您当前的位置:首页 > 网站建设 > 网站维护
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax | jQuery | 小程序 |

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

51自学网 2025-02-05 12:16:17
  网站维护

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/libCOPY target/resources /app/resourcesCOPY target/monitor-api.jar /app/monitor-api.jarCOPY target/license.json /app/license.jsonCOPY target/license.md5 /app/license.md5 # 设置 Spring Profile 激活 dev 配置ENV SPRING_PROFILES_ACTIVE=dev # 暴露端口 20001 和 2000EXPOSE 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 build WORKDIR /app COPY pom.xml .COPY src ./src RUN mvn clean package -DskipTests # 第二阶段:运行阶段FROM openjdk:8-jdk-alpine WORKDIR /app COPY --from=build /app/target/your-project-name.jar . ENTRYPOINT ["java", "-jar", "your-project-name.jar"]EXPOSE 8080

Maven 和其他构建工具只存在于构建阶段,最终镜像只包含运行 JAR 所需的内容。这样镜像将更加轻量。
原文链接:https://blog.csdn.net/t631048648/article/details/143802224


下载地址:
在Docker环境中部署和运行One API的操作方法
Nginx日志中request_time和upstream_response_time区别
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。