docker如何进行离线部署springboot项目

Docker 离线部署 Spring Boot 项目的核心思路是:提前在有网环境准备好所有依赖和镜像,再拷贝到内网机器上加载运行。下面按步骤讲清楚怎么做。


一、整体思路概览

  1. 在有网机器上​

    • 安装 Docker

    • 制作 Spring Boot Jar + Dockerfile → 构建镜像 → 保存为 .tar文件

  2. 在无网机器上​

    • 安装 Docker(离线安装包)

    • 导入镜像 .tar→ docker run启动容器

关键点:镜像打包 + Docker 离线安装。


二、离线准备阶段(有网机器)

1. 安装 Docker(离线)

  1. 在有网的机器上下载 Docker 离线安装包(以 CentOS 为例):

    复制代码
    # 下载 rpm 包(版本可按需调整)
    yum install --downloadonly --downloaddir=./docker-rpms docker-ce docker-ce-cli containerd.io
  2. 将 ./docker-rpms整个目录拷到目标离线服务器,然后:

    复制代码
    cd docker-rpms
    yum localinstall -y *.rpm

其他系统类似,如 Ubuntu 用 apt download下载 .deb包,再 dpkg -i安装。

2. 准备 Spring Boot 项目

  • 项目正常打包成可执行 JAR:

    复制代码
    mvn clean package -DskipTests
  • 得到 target/your-app.jar

3. 编写 Dockerfile

在项目根目录创建 Dockerfile(示例):

复制代码
# 使用轻量 JDK 基础镜像
FROM openjdk:11-jre-slim

# 设置工作目录
WORKDIR /app

# 拷贝 jar 包(文件名改成你的)
COPY target/your-app.jar app.jar

# 暴露端口(与 application.yml 保持一致)
EXPOSE 8080

# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]

注意:若目标服务器 CPU 架构不同(如 arm),基础镜像也要对应,否则镜像无法运行。

4. 构建镜像并保存

  1. 构建镜像:

    复制代码
    docker build -t your-spring-app:1.0 .
  2. 查看是否成功:

    复制代码
    docker images
  3. 导出镜像为 tar 文件:

    复制代码
    docker save -o your-spring-app-1.0.tar your-spring-app:1.0

你会得到一个 your-spring-app-1.0.tar,这就是离线部署的核心文件。


三、离线部署阶段(目标服务器)

1. 安装 Docker(离线)

按前面"离线安装 Docker"的方式,把 rpm/deb 拷过去安装好。

验证:

复制代码
docker version

2. 导入镜像

把 your-spring-app-1.0.tar拷到目标服务器,然后:

复制代码
docker load -i your-spring-app-1.0.tar

导入成功后:

复制代码
docker images
# 应能看到 your-spring-app:1.0

3. 运行容器

复制代码
docker run -d \
  --name spring-app \
  -p 8080:8080 \
  your-spring-app:1.0
  • -d后台运行

  • --name给容器起个名字

  • -p宿主机端口:容器端口

检查运行状态:

复制代码
docker ps
docker logs spring-app

四、进阶:把 JDK 也打进镜像,减少依赖

如果目标机器没有 JDK 环境,只要用 JRE 或 JDK 的官方镜像做基础即可,上面已经用 openjdk:11-jre-slim示范。

更严格一点,可以用多阶段构建,只保留运行时:

复制代码
# 阶段1:编译
FROM maven:3.8-openjdk-11 AS builder
WORKDIR /build
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests

# 阶段2:运行
FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=builder /build/target/your-app.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

这样镜像更小、更干净,也更利于离线部署的一致性。


五、常见问题排查

  • 镜像导入失败:多半是基础镜像缺失或与架构不匹配,建议在和目标服务器相同架构的机器上构建镜像。

  • 容器启动就退出 :看日志 docker logs <容器名>,通常是端口冲突、配置文件路径不对或 Jar 本身运行报错。

  • Docker 启动不了:确认内核版本、存储驱动是否正常,离线环境可以先在一台测试机上演练一遍流程。


如果你愿意,我可以帮你写一个一键脚本(有网打包 / 离线导入启动),方便你在团队内部复用这套离线部署流程。

相关推荐
十年Java程序媛5 小时前
Java 接口和抽象类对比|Java8 新特性,抛弃老旧八股,正确选型
java·spring boot·后端
sbjdhjd5 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全
热爱Liunx的丘丘人5 小时前
1、什么是K8s
云原生·容器·kubernetes
帷幕落秋7 小时前
Docker的两种安装
运维·docker·容器
工业一体机老司机7 小时前
工业一体机选购后的系统部署:Ubuntu下Docker容器化运行与GPIO配置
linux·ubuntu·docker·人机交互
for_ever_love__7 小时前
MySQL 高频面试题 30 问:索引、事务、锁、日志、主从与分库分表(MySQL 8.0 版)
java·数据库·spring boot·mysql·spring cloud·面试·总结
fengkai45457 小时前
十二、Redis -2
运维·数据库·redis·容器
SL_staff7 小时前
设备越多系统越崩?根源在三层抽象失效
spring boot·物联网·github
威哥爱编程8 小时前
【AI全栈12-01】Spring Boot 为何是 AI 全栈后端优选
java·spring boot·后端
威哥爱编程8 小时前
【AI全栈12-03】Spring Boot 用多模型路由把智能客服成本降下来
java·spring boot·后端