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 查看运行中的容器
相关推荐
一路向北⁢2 小时前
社交平台私信发送、已读状态同步与历史消息缓存系统设计文档(SpringBoot + RabbitMQ + Redis + MySQL)
spring boot·rabbitmq·java-rabbitmq·异步消息
进击的小菜鸡dd2 小时前
互联网大厂Java面试:从Spring Boot到微服务架构的场景化技术问答
java·spring boot·redis·ci/cd·微服务·消息队列·mybatis
南山十一少2 小时前
最新款2025版的IDEA的下载、注册以及进行spring boot 工程和spring cloud工程的搭建和使用
spring boot·spring cloud·intellij-idea
soragui2 小时前
【Spring Boot】微服务架构下Saga模式的实战解析
spring boot·微服务·架构
祁思妙想2 小时前
使用Docker部署Python前后端项目
运维·docker·容器
何中应2 小时前
使用Spring自带的缓存注解维护数据一致性
java·数据库·spring boot·后端·spring·缓存
heartbeat..2 小时前
Spring Boot 学习:原理、注解、配置文件与部署解析
java·spring boot·学习·spring
C_心欲无痕2 小时前
Docker 本地部署 SSR 前端项目实战指南
前端·docker·容器