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

相关推荐
w***Q35035 分钟前
Git工作流自动化
运维·git·自动化
xu_yule3 小时前
Linux_12(进程信号)内核态和用户态+处理信号+不可重入函数+volatile
linux·运维·服务器
虾..3 小时前
Linux 环境变量&&进程优先级
linux·运维·服务器
小雪_Snow4 小时前
CentOS 7 测试 docker 镜像源
docker·centos
数据库学啊5 小时前
团队小希望运维简单,时序数据库选型有什么推荐?
运维·数据库·时序数据库
霍格沃兹软件测试开发5 小时前
Playwright MCP浏览器自动化指南:让AI精准理解你的命令
运维·人工智能·自动化
郝学胜-神的一滴6 小时前
Linux命名管道:创建与原理详解
linux·运维·服务器·开发语言·c++·程序人生·个人开发
wanhengidc6 小时前
云手机性能如何?
运维·服务器·科技·智能手机·云计算
wan_da_ren7 小时前
Docker安装Elasticsearch9.2.1与Kibana9.2.1 保姆教程(带验证版)
运维·docker·jenkins
Hellc0077 小时前
Docker部署BaGet私有NuGet服务器:从入门到备份恢复完整指南 二
服务器·docker·eureka