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
#!/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 查看运行中的容器