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

相关推荐
代码老y1 分钟前
Docker:容器化技术的基石与实践指南
运维·docker·容器
典学长编程24 分钟前
Linux操作系统从入门到精通!第二天(命令行)
linux·运维·chrome
DuelCode1 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
你想考研啊3 小时前
四、jenkins自动构建和设置邮箱
运维·jenkins
Code blocks3 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins
饥饿的半导体4 小时前
Linux快速入门
linux·运维
杨浦老苏5 小时前
开源服务运行监控工具Lunalytics
docker·群晖·网站监控
还是奇怪6 小时前
Linux - 安全排查 2
linux·运维·安全
牛奶咖啡137 小时前
Linux系统的常用操作命令——文件远程传输、文件编辑、软件安装的四种方式
运维·服务器·软件安装·linux云计算·scp文件远程传输·vi文件编辑·设置yum的阿里云源
难受啊马飞2.07 小时前
如何判断 AI 将优先自动化哪些任务?
运维·人工智能·ai·语言模型·程序员·大模型·大模型学习