Docker后端部署

1、构建Docker容器

首先编写 Dockerfile,将后端项目打包为 Docker 容器镜像。

Dockerfile 是一个文本配置文件,包含一系列指令,用干自动化构建 Docker 容器镜像。我们需要在 Dockerfile 中定义:

  1. 基础环境(比如预装 JDK 的 Linux 系统)
  2. 有哪些原始文件?(比如项目源代码)
  3. 如何构建项目?(比如 maven package命令打包)
  4. 如何启动项目?(比如 java -jar 命令).

2、两种编写方式

1、运行时打包。只把源代码复制到 Docker 工作空间中,在构造镜像时执行Maven打包。

java 复制代码
# 使用预装 Maven 和 JDK21 的镜像
FROM maven:3.9-amazoncorretto-21
WORKDIR /app

# 只复制必要的源代码和配置文件
COPY pom.xml .
COPY src ./src

# 使用 Maven 执行打包
RUN mvn clean package -DskipTests

# 暴露应用端口
EXPOSE 8123

# 使用生产环境配置启动应用
CMD ["java", "-jar", "/app/target/yuAn-ai-agent-0.0.1-SNAPSHOT.jar", "--spring.profiles.active=prod"]

简单来说,就是在构建 Docker 镜像的时候,动态地在容器内完成应用代码的编译打包操作。不是在本地先把 jar 包生成好再 copy 进去。而是 把代码 copy 到 Docker 镜像里,在构建镜像时去编译、打包。打包动作和镜像构建一步到位。

2、预打包

提前在自己的电脑上把 jar 包构建好,直接把得到的 target 目录下的 jar 包复制到 Docker 工作空间中,无需在构造镜像时打包。

java 复制代码
# 使用轻量级 JDK21 运行环境
FROM openjdk:21-slim

# 工作目录
WORKDIR /app

# 复制已经打包好的JAR文件(假设已放在当前目录)
COPY target/yu-ai-agent-0.0.1-SNAPSHOT.jar app.jar

# 暴露应用端口
EXPOSE 8123

# 使用生产环境配置启动应用
CMD ["java", "-jar", "app.jar", "--spring.profiles.active=prod"]

总结:

第一段:

源码 + Dockerfile ------> 构建镜像(包含打包过程) ------> 镜像(大)

第二段:

源码 ------> 本地打 jar ------> jar + Dockerfile ------> 构建镜像(不打包) ------> 镜像(小)

比较:

第一种方式的优点是更加自动化,不用每次部署项目都手动打jar 包,减少人工部署的成本和误差,但缺点是每次构建镜像时都要拉取 Maven 依赖,耗时更长。可以优先选择第一种方式,如果 Serverless 平台在构建镜像的过程中耗时过长、或者无法拉取依赖,那么再选择第二种方式。

相关推荐
阳光九叶草LXGZXJ5 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
黄大刀6 小时前
DataPulse一款开箱即用的SCADA(四)-历史记录
运维·scada·动环
归秋1428 小时前
2026 企业 AI 办公工具选型指南:从评估框架到产品适配
大数据·运维·人工智能
Android系统攻城狮9 小时前
Linux Gstreamer深度解析之gst_audio_encoder_set_frame_max调用流程与实战(六十一)
android·linux·运维·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
硅基手札10 小时前
【Linux内核专栏 14】网络协议栈
linux·运维·网络协议
工作10年+,存储芯片行业12 小时前
Linux NVMe 中断排查与性能优化:CPU 亲和性
linux·运维·服务器·windows·性能优化·ssd·pcie
快乐の番薯12 小时前
卷王问卷考试系统自动化功能测试
运维·功能测试·自动化
一号弯13 小时前
装完LINUX,请先新建日常用户
linux·运维·服务器
许彰午14 小时前
03-Linux环境准备依赖包内核参数与用户组
linux·运维·服务器·数据库
阳光九叶草LXGZXJ14 小时前
达梦数据库-报错-16-MERGE INTO提示:无效的列名[XX]
linux·运维·数据库·sql·学习