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 平台在构建镜像的过程中耗时过长、或者无法拉取依赖,那么再选择第二种方式。

相关推荐
wanhengidc17 小时前
如何使用云手机进行游戏挂机?
运维·服务器·游戏·智能手机·云计算
wangjialelele17 小时前
端口号、常见协议和套接字
linux·运维·服务器·c语言·网络
木易 士心17 小时前
Nginx 基本使用和高级用法详解
运维·javascript·nginx
蜜蜜不吃糖17 小时前
ESXI主机重置带外密码
linux·运维·服务器
智象科技18 小时前
CMDB报表体系如何驱动智能运维
大数据·运维·报表·一体化运维·cmdb
高光视点18 小时前
伊萨推出升级版SUPRAREX™ PRO自动化切割设备:更大尺寸、更强结构、更高安全性、更易维护
运维·自动化
b***251118 小时前
深圳比斯特自动化|圆柱电池测试设备核心功能与技术发展解析
运维·自动化
King's King18 小时前
自动化仓库总体设计
运维·自动化
Dobby_0518 小时前
【Go】C++ 转 Go 第(一)天:环境搭建 Windows + VSCode 远程连接 Linux
linux·运维·c++·vscode·golang
wanhengidc19 小时前
操作简单稳定选巨 椰 云手机
运维·服务器·游戏·智能手机·云计算