东莞网站网络公司,怎样看一个网站做的网络广告,桂林漓江景区游玩攻略,阿里云服务器价格表包年一个安静的周末#xff0c;shigen又睡懒觉了#xff0c;上次说的拖延症的惩罚来了#xff1a;早晚各100个健腹轮练习#xff0c;早上的已经完成了。今天的文章来的有点晚#xff0c;但是依旧保持质量。 springboot项目生成容器并运行
背景
将springboot项目打包成jar包shigen又睡懒觉了上次说的拖延症的惩罚来了早晚各100个健腹轮练习早上的已经完成了。今天的文章来的有点晚但是依旧保持质量。 springboot项目生成容器并运行
背景
将springboot项目打包成jar包上传到服务器并打包成镜像运行成docker容器对外提供服务。 这篇文档写于2023年5月25日现在shigen分享出来也希望能给开发者提供技术参考。 问题场景
本地的springboot服务编写好代码之后需要同步到服务器。在服务器上服务是以容器的形式运行的所以需要经过以下步骤 解决方案
效率化首选的shell脚本使用rsync工具上传jar包到服务器在服务器使用docker相关的命令进行构建镜像和运行生成容器提供服务
具体实现
upload.sh
本地打包构建服务生成一个jar包上传到服务器
#!/bin/zsh# save original file info and show progress
JAR_FILE_NAMEwx-develop-0.0.1-SNAPSHOT.jar
UPLOAD_CMD
rsync -e -avp \
./dockerfile \
./deploy.sh \
../../../target/$JAR_FILE_NAME \
rootserver-ip:/app
# maven clean install to ensure the jar is the newest
mvn clean install -f ../../../pom.xml
if [ $? -ne 0 ]; thenecho maven build failed.........exit 1
elseecho now start upload files include $JAR_FILE_NAME
fiif [ ! -e ./dockerfile ] || [ ! -e ../../../target/$JAR_FILE_NAME ]; thenecho dockerfile or jar JAR_FILE_NAE not existsexit 1
fi
eval $UPLOAD_CMD后期的优化的话建议将脚本直接放在项目的根路径下即与pom.xml在同一级显示。 Dockerfile 需要注意 生成的镜像的时区问题约定项目的工作目录指定JVM的参数暴露服务的端口号 FROM openjdk:8u302-jdk
# 作者信息
MAINTAINER shigen
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo Asia/Shanghai /etc/timezone
# 拷贝jar 把可执行jar包复制到基础镜像的根目录下
ADD ./wx-develop.jar /wx-develop.jar
# 设置暴露的端口号
EXPOSE 8088
# 在镜像运行为容器后执行的命令
ENTRYPOINT [java,-jar,wx-develop.jar,-Xms256m, -Xmx256m,-XX:UnlockExperimentalVMOptions,-XX:UseCGroupMemoryLimitForHeap]deploy.sh
正如我的脚本注释所说to run jar as a docker container即将jar包生成镜像并运行成容器。根据我上文分析的流程进行设计。
#!/bin/bash# this shell is designed to run jar as a docker container# define colors
RED\e[1;31m # 红
GREEN\e[1;32m # 绿
YELLOW\e[1;33m # 黄
BLUE\e[1;34m # 蓝
PINK\e[1;35m # 粉红
RES\e[0m # 清除颜色JAR_FILE_NAMEwx-develop-0.0.1-SNAPSHOT.jar
DEFAULT_LABELwx-develop:date %Y%m%d
CONTAINER_PORT8088/tcp
PORT80if [ ! -e ./dockerfile ] || [ ! -e ./$JAR_FILE_NAME ]; thenecho -e $RED dockerfile or jar $JAR_FILE_NAE not exists $RESexit 1
fiecho -e $YELLOW now start to build $JAR_FILE_NAME$RESread -t 5 -p now input container label which concat with :, default is $DEFAULT_LABEL - labelif [[ -z $label ]] || [[ $label ! *:* ]]; thenecho -e \n$BLUE use default label $DEFAULT_LABEL $RES\nlabel$DEFAULT_LABEL
fi
echo -e $GREEN now using the label: $label $RES# kill the serve and remove container built before
CONTAINER_ID$(docker ps | grep $CONTAINER_PORT | awk {print $1})
IMAGE_ID$(docker ps | grep $CONTAINER_PORT | awk {print $2})if [[ ! -z $CONTAINER_ID ]]; thenecho -e $RED now stop container $CONTAINER_ID $RESdocker stop $CONTAINER_IDdocker rm $CONTAINER_ID
fi
if [[ ! -z $IMAGE_ID ]]; thenecho -e $RED now delete image $IMAGE_ID $RESdocker rmi $IMAGE_ID
fieval docker build -t $label .
echo -e $GREEN successfully build $label $RESecho -e $BLUE----------------------now run container $label--------------------------$RES
docker run -d -p $PORT:$CONTAINER_PORT --name $(echo $label | cut -d : -f 1) $label
echo -e $GREEN successfully run serve on port: $PORT $RES使用方法
在本地的 src/main/resources 目录下执行 upload.sh在服务器上执行 deploy.sh 脚本的文件可以可以放在项目的根路径下这样避免了在脚本中出现过多的深层相对路径。 预期效果 以上就是今天的文章内容分享了感谢伙伴们的阅读觉得不错的话欢迎点赞、在看、关注、转发哈。
与shigen一起每天不一样