文章目录
- 开机自启动docker
- 打包后端项目
- Dockerfile文件
- 脚本文件
- 使用
开机自启动docker
systemctl enable docker
打包后端项目
这里的项目位置是target同级目录
1.在项目下面新建一个bin目录 新建一个package.txt
写入下方代码后 后缀改为.bat
@echo off
echo.
echo [信息] 打包Web工程,生成war/jar包文件。
echo.%~d0
cd %~dp0cd ..
call mvn clean package -Dmaven.test.skip=truepause
2.项目下新建一个deploy文件夹里面新建一个deploy.ps1脚本文件
简单介绍下 将 windows上写的项目通过入口服务器(联网) 将项目部署到新的服务器(不通过入口服务器无法访问)
$script_dir = Split-Path -Parent $MyInvocation.MyCommand.Definition
$working_dir = $pwd
$deploy_dir = "/opt/diagnosis"function deployBackEnd {cd $script_dir\..'' | .\bin\package.bat# 将项目上传到入口服务器的下载地址scp -P 13151 .\target\【你的jar包名字】.jar 你的服务器下载地址# 将入口服务器的下载地址上传的东西 放在 新服务器ssh 入口服务器(用户名@IP地址) -p端口号 "sshpass -p 密码 scp -o StrictHostKeyChecking=no 你服务器的下载地址 用户名@IP地址/部署地址"# 执行新服务器的脚本(下方介绍)ssh 入口服务器(用户名@IP地址) -p端口号 "sshpass -p 密码 ssh -o StrictHostKeyChecking=no 用户名@IP地址 ' bash 脚本名字'"# 删除入口服务器上上传的jar包ssh 入口服务器(用户名@IP地址) -p端口号 "rm -f 下载地址的安装包"
}
deployBackEnd
示例
这里使用ssh
$script_dir = Split-Path -Parent $MyInvocation.MyCommand.Definition
$working_dir = $pwd
$deploy_dir = "/opt/diagnosis"function deployBackEnd {cd $script_dir\..'' | .\bin\package.batscp -P 13151 .\target\yudao-server.jar root@103.121.52.32:/var/www/html/download/ssh root@109.115.52.38 -p13151 "sshpass -p '111000' scp -o StrictHostKeyChecking=no /var/www/download/app.jar dell@192.168.80.47:/opt/diagnosis/target"ssh root@109.115.52.38 -p13151 "sshpass -p 111000 ssh -o StrictHostKeyChecking=no dell@192.168.80.47 ' bash /opt/diagnosis/delete_and_run.bash'"ssh root@109.115.52.38 -p13151 "rm -f /var/www/download/app.jar"
}
deployBackEnd
Dockerfile文件
可以自己编写不太一样
FROM eclipse-temurin:21-jre## 创建目录,并使用它作为工作目录
RUN mkdir -p /app
WORKDIR /app
## 将后端项目的 Jar 文件,复制到镜像中
COPY ./target/app.jar app.jar## 设置 TZ 时区
ENV TZ=Asia/Shanghai
## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖
ENV JAVA_OPTS="-Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom"## 应用参数
ENV ARGS=""## 暴露后端项目的 48080 端口
EXPOSE 48080## 启动后端项目
CMD java ${JAVA_OPTS} -jar app.jar $ARGS
上传到服务器中后自己选择一个合适的文件夹 然后旁边新建一个target文件夹 将上方的 jar包放入target里面 上方的脚本文件中存在
mnt 是共享文件的目录 logs是共享日志的目录
脚本文件
image_name="app"
image_tag="v1"# 查找镜像 ID
image_id=$(docker images --format "{{.ID}}" --filter "reference=${image_name}:${image_tag}")# 检查是否找到匹配的镜像
if [[ -n "$image_id" ]]; thenecho "找到镜像 ${image_name}:${image_tag},ID 为 ${image_id}"# 停止并删除与该镜像相关的容器container_ids=$(docker ps -aq --filter "ancestor=${image_name}:${image_tag}")if [[ -n "$container_ids" ]]; thendocker stop $container_idsdocker rm $container_idsecho "已停止并删除与该镜像相关的容器"elseecho "未找到与该镜像相关的容器"fi# 删除镜像docker rmi "$image_id"echo "成功删除镜像 ${image_name}:${image_tag}"
elseecho "未找到镜像 ${image_name}:${image_tag}"
fi#构建镜像docker build -t "${image_name}:${image_tag}" /opt# 运行容器echo "开始启动 yudao-server 容器"docker run -d \--name="${image_name}" \-p 48080:48080 \-v /opt/logs:/root/logs/ \-v /opt/mnt:/root/mnt/ \--restart=always \"${image_name}:${image_tag}"echo "正在启动 diagnosis 容器中,需要等待 60 秒左右"echo "已成功运行容器 ${image_name},映射端口 48080:48080"
使用
右击 deploy.ps1 使用PowerShell运行即可