docker部署springboot项目记录

1.服务器创建项目模块目录,比如/opt/project/system,opt/project/kuaidi等等

2.每个模块目录中,放入对应模块的Dockerfile文件,和容器启动命令,以及相关日志文件,项目jar文件等

3.相关脚本示例

Dockerfile

复制代码
## AdoptOpenJDK 停止发布 OpenJDK 二进制,而 Eclipse Temurin 是它的延伸,提供更好的稳定性
FROM eclipse-temurin:17-jre

## 创建目录,并使用它作为工作目录
RUN mkdir -p /kuaidi
WORKDIR /kuaidi
## 将后端项目的 Jar 文件,复制到镜像中
COPY ./wms-admin.jar app.jar

#将项目需要使用的文件打入容器内
# 创建固定so库目录
RUN mkdir -p /app/lib-linux && chmod 755 /app/lib-linux
# 复制所有so文件到容器
COPY ./lib-linux/ /app/lib-linux/
# 批量赋权
RUN chmod -R 755 /app/lib-linux/

# 配置LD_LIBRARY_PATH(自动识别依赖so)
ENV LD_LIBRARY_PATH=/app/lib-linux:$LD_LIBRARY_PATH


## 设置 TZ 时区
## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms256m -Xmx256m"

## 暴露后端项目的 48092 端口
EXPOSE 48092

# 定义默认环境变量-覆盖项目yaml中的参数(可被启动容器时的参数覆盖)
ENV WARN_IP=0.0.0.0
ENV WARN_PORT=7200

## 启动后端项目(核心修改:添加-D参数覆盖ehome配置,优先级高于jar内配置)
CMD java ${JAVA_OPTS} \
    -Djava.security.egd=file:/dev/./urandom \
    -Dwarn-ip=${EHOME_WARN_IP} \
    -Dwarn-port=${EHOME_WARN_PORT} \
    -jar app.jar

deploy.sh

复制代码
#!/bin/bash
set -e

# 配置项
IMAGE_NAME="kuaidi:latest"
APP_NAME="kuaidi"
APP_PORT="48092:48092"
KUAIDI_PORT_TCP="7200:7200/tcp"  # 显式指定TCP
KUAIDI_PORT_UDP="7200:7200/udp"  # 新增UDP映射(核心修复)

## 第一步:安全停止并删除老容器
echo "开始清理旧容器 [$APP_NAME]..."
# 先停止容器(若运行),忽略停止失败
docker stop $APP_NAME > /dev/null 2>&1 || echo "容器 [$APP_NAME] 未运行,无需停止"
# 删除容器(若存在),忽略删除失败
docker rm $APP_NAME > /dev/null 2>&1 || echo "容器 [$APP_NAME] 不存在,无需删除"
echo "旧容器清理完成"

## 第二步:清理旧镜像(优化逻辑,避免构建失败风险)
echo "检查并清理旧镜像 [$IMAGE_NAME]..."
# 先检查镜像是否存在,且确保无容器引用该镜像(避免删除失败)
if docker image inspect "$IMAGE_NAME" &> /dev/null; then
    # 强制删除镜像(即使有未清理的临时容器)
    docker rmi -f "$IMAGE_NAME" > /dev/null 2>&1 && echo "旧镜像 [$IMAGE_NAME] 已删除" || echo "旧镜像删除失败(可能被其他容器引用)"
fi

## 第三步:构建新镜像
echo "开始构建镜像 [$IMAGE_NAME]..."
if docker build -t "$IMAGE_NAME" .; then
    echo "镜像构建成功"
else
    echo "镜像构建失败,脚本终止"
    exit 1
fi

## 第四步:启动新容器(核心修改:补充UDP映射、权限、重启策略)
echo "开始启动容器 [$APP_NAME]..."
docker run -d \
--name $APP_NAME \
--privileged=true \
--restart always \
-p $APP_PORT \
-p $KUAIDI_PORT_TCP \
-p $KUAIDI_PORT_UDP \
-e "SPRING_PROFILES_ACTIVE=dev" \
-v /opt/project/$APP_NAME/logs:/root/logs/ \
$IMAGE_NAME

# 验证容器启动状态
sleep 5
if docker ps | grep -q $APP_NAME; then
    echo "容器 [$APP_NAME] 启动成功!"
    echo "端口映射详情:"
    docker port $APP_NAME
else
    echo "容器 [$APP_NAME] 启动失败!"
    echo "容器日志:"
    docker logs $APP_NAME
    exit 1
fi

4.docker命令:

复制代码
1. docker system prune -a 一键清理未使用的容器、镜像、缓存等,安全且高效
2. docker exec -it [容器ID/容器名称] /bin/bash   进入容器
3. docker ps 查看运行中的容器
相关推荐
曾几何时`4 小时前
Docker容器化部署编译运行模块
运维·docker·容器
李慕婉学姐4 小时前
【开题答辩过程】以《基于Spring Boot的疗养院理疗管理系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring boot·后端
qq_12498707534 小时前
基于协同过滤算法的运动场馆服务平台设计与实现(源码+论文+部署+安装)
java·大数据·数据库·人工智能·spring boot·毕业设计·计算机毕业设计
一路向北⁢5 小时前
Spring Boot 3 整合 SSE (Server-Sent Events) 企业级最佳实践(一)
java·spring boot·后端·sse·通信
风象南5 小时前
JFR:Spring Boot 应用的性能诊断利器
java·spring boot·后端
爱吃山竹的大肚肚5 小时前
微服务间通过Feign传输文件,处理MultipartFile类型
java·spring boot·后端·spring cloud·微服务
直饮水观察哨5 小时前
商用净水器亲测对比,哪个更专业?
容器
qq_12498707535 小时前
基于springboot的尿毒症健康管理系统的设计与实现(源码+论文+部署+安装)
java·spring boot·spring·毕业设计·计算机毕业设计
编程彩机5 小时前
互联网大厂Java面试:从Spring Boot到微服务优化场景解析
spring boot·分布式事务·微服务架构·java面试·技术解析
猿小羽6 小时前
Flyway + Spring Boot:实现数据库迁移的最佳实践
spring boot·编程·flyway·最佳实践·数据库迁移