docker部署springboot jar包项目

docker部署springboot jar包项目

  • 前提,服务器环境是docker环境,如果服务器没有安装docker,可以先安装docker环境。
    各个环境安装docker:
    Ubuntu上安装Docker:
    ubuntu离线安装docker:
    CentOS7离线安装Docker:
    CentOs7在线安装docker:
    docker安装成功后,执行docker ps命令

一、编译springboot项目生成jar包

  • 将项目jar包上传到服务器安装目录
  • 如果使用idea开发工具,直接点击右侧Maven,clean,install生成jar包
    在这里插入图片描述
  • install编译完成后会在target下生成一个jar包
    在这里插入图片描述
  • 将这个jar包上传到服务器的安装目录

二、创建安装目录

  • /opt/projects/demo-java/target/
cd /opt
mkdir projects
cd projects
# 创建项目目录和日志目录
mkdir demo-java log
cd demo-java
mkdir target
cd /opt/projects/log
mkdir java
  • 将jar包上传到/opt/projects/demo-java/target/目录下
    在这里插入图片描述
  • 项目中配置的日志目录是/opt/project/log,构建成容器后日志目录也是这个
  • 日志配置文件logback-spring.xml
    在这里插入图片描述

三、创建Dockerfile

# 基于哪个镜像
FROM openjdk:8-jdk
# 将本地文件夹挂载到当前容器
VOLUME /tmp
# 拷贝文件到容器,ocr-compare-demo-java.jar这里是maven打包后的名字
# target,必须与服务器上创建的目录保持一致
ADD target/ocr-compare-demo-java.jar app.jar
#时区设置
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS="-server  -Xmx512m -Xms128m -Xmn256m -XX:MetaspaceSize=64m"
# 配置容器启动后执行的命令
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
  • 将Dockerfile放在/opt/projects/demo-java目录下,与target同级
    在这里插入图片描述
  • FROM openjdk:8-jdk # 基于openjdk这个镜像来构建,服务器如果没有这个镜像,默认会先拉去这个镜像
  • 查看镜像docker images
    在这里插入图片描述

四、创建启动文件

  • build-demo-java.sh
#!/bin/bashecho "-----clear container and image start-----"
# 命名容器名称
rep=demo-java
# 如果此容器存在则停止
if docker ps | grep "$rep";thendocker stop $rep
fi
# 如果此容器存在则删除
if docker ps -a | grep "$rep";thendocker rm $rep
fi
# 如果此镜像存在则删除
if docker images | grep "$rep";thendocker rmi $rep
fi
echo "----clear container and image end----"
# 构建镜像
echo "------build docker image start------"
docker build -t $rep /opt/projects/demo-java || ! echo "build new image error" || exit
echo "------build docker image end-------"echo "----build container start-----"
# 启动容器
docker run -d -p 7070:7070 \
-v /opt/projects/log/java:/opt/project/log \
--restart=always --privileged=true \
-e TZ=Asia/Shanghai \
--name $rep $rep || ! echo "cannot run container:$rep,exit" || exit
echo "-----build container end-----"# -p 7070:7070 [宿主机映射端口]:[容器端口-jar包项目中配置的端口]
# -v /opt/projects/log/java:/opt/project/log  -v配置容器目录映射到宿主机,[宿主机目录]:[容器目录]
# -e TZ=Asia/Shanghai 给容器设置时区
# --name $rep $rep  容器名称、镜像名称,镜像名称不带版本号时默认latest版本

五、执行启动文件

cd  /opt/projects/
sh sh build-demo-java.sh 

在这里插入图片描述
在这里插入图片描述

  • 查看镜像docker images
    在这里插入图片描述

六、查看部署的容器

# 查看容器
docker ps
# 查看看那日志
docker logs -f --tail 500 demo-java

在这里插入图片描述

  • 查看日志 docker logs -f --tail 500 demo-java
    在这里插入图片描述
  • 启动成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/274525.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

04-微服务 面试题

目录 1.Spring Cloud 常见的组件有哪些? 2.服务注册和发现是什么意思?(Spring Cloud 如何实现服务注册发现) 3.你们项目负载均衡如何实现的 ? 4.什么是服务雪崩,怎么解决这个问题? 5.你们服务是怎么监控的? 6.微服务限流(漏桶算法、令牌桶算法) 7.解释一下CAP…

【AI绘画】免费GPU Tesla A100 32G算力部署Stable Diffusion

免责声明 在阅读和实践本文提供的内容之前,请注意以下免责声明: 侵权问题: 本文提供的信息仅供学习参考,不用做任何商业用途,如造成侵权,请私信我,我会立即删除,作者不对读者因使用本文所述方法…

【死磕Elasticsearch】从实战中来,到实战中去

文章目录 写在前面:1、索引阻塞的种类2、什么时候使用阻塞?场景1:进行系统维护场景。场景2:保护数据不被随意更改场景。场景3:优化资源使用的场景。场景4:遵守安全规则场景。 3、添加索引阻塞API4、解除设置…

QGIS 开发之旅一《二次开发环境搭建》

1、 安装QT 下载QT Index of /new_archive/qt 我选择的版本是 Qt5.14.2 2、安装VS2017 Downloads & Keys - Visual Studio Subscriptions。下载后选择windows通用平台开发和C 开发就可以了。 3、安装插件QT vs tools 搜索 qt vs tools,选择第一个安装 …

安卓简单登录

注意 有的朋友不知道登录咋写,这里我就简单给出相应代码,用的本地存储,没用网络请求,有需要可以替换成想要的,废话不多上代码 登录 import androidx.appcompat.app.AppCompatActivity;import android.content.Context…

springboot的Converter和HttpMessageConveter

Converter和HttpMessageConveter是springboot和springmvc在处理请求的时候需要用到的。但是这两者的完全是不一样的,作用的地方也不一样。 1,springboot和springmvc处理请求的流程 先来回顾一下处理请求的流程: 用户向服务器发送请求&#…

WebSocket:实现客户端与服务器实时通信的技术

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

嵌入式系统工程师错题总结

笔者来介绍一下嵌入式系统工程师考试的一些易错题目 题目介绍  流水线指令计算公式:一条指令总时间max(单个指令执行时间)*(指令数-1)  平均故障间隔时间  ICMP协议:传送通信问题相关的消息。 …

12双体系Java学习之局部变量和作用域

局部变量 局部变量的作用域 参数变量

小白必看,靠这几步写一份简单的产品说明书!

我们都知道,无论是新产品发布,还是老产品的推广,产品说明书都扮演着至关重要的角色。产品说明书可以帮助用户正确、高效地使用产品,也是传递企业发展理念、展示企业形象的有效途径。但作为一个小白,怎样才能写一份简单…

Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 4-1、线条平滑曲面(原始图形)

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata fro…

【Vue+ElementUI】Table表格实现自定义表头展示+表头拖拽排序(附源码)

效果图 因项目采用的是Vue2,所以这个功能目前采用的是Vue2的写法。 Vue3请自行修改扩展代码;或收藏关注帖子,后续Vue3项目如有用到会在本帖子更新修改。 安装vuedraggable(拖拽插件) cnpm i vuedraggable先说用法&…

prometheus 原理(架构,promql表达式,描点原理)

大家好,我是蓝胖子,提到监控指标,不得不说prometheus,今天这篇文章我会对prometheus 的架构设计,promql表达式原理和监控图表的绘图原理进行详细的解释。来让大家对prometheus的理解更加深刻。 架构设计 先来看看&am…

【REST2SQL】12 REST2SQL增加Token生成和验证

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 【REST2SQL】07 GO 操作 Mysql 数据库 【RE…

【Echarts】曲线图上方显示数字以及自定义值,标题和副标题居中,鼠标上显示信息以及自定义信息

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《前端》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握…

个人博客系列-后端项目-RBAC角色管理(6)

修改上一篇文章创建的用户表 ## 用户表 from django.contrib.auth.hashers import make_password, check_password from django.contrib.auth.models import AbstractBaseUserclass User(AbstractBaseUser):username models.CharField(max_length255, uniqueTrue, verbose_na…

Go语言框架路由Controller控制器设计思路gin路由根据控制器目录分层生成路由地址

Controller设计好处 框架设计用controller分请求路由层级,应用从app目录开始对应请求url路由地址,这样设计师方便开发时候通过请求地址层级快速定位接口方法对应的代码位置。 例如api接口请求路径为:​​http://localhost:8110/​​busines…

C#,老鼠迷宫问题的回溯法求解(Rat in a Maze)算法与源代码

1 老鼠迷宫问题 迷宫中的老鼠,作为另一个可以使用回溯解决的示例问题。 迷宫以块的NN二进制矩阵给出,其中源块是最左上方的块,即迷宫[0][0],目标块是最右下方的块,即迷宫[N-1][N-1]。老鼠从源头开始,必须到达目的地。老鼠只能朝两个方向移动:向前和向下。 在迷宫矩阵…

如何在Linux使用docker安装Plik并实现无公网ip上传下载内网存储的文件资源

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂,风趣幽默&…

数据结构小记【Python/C++版】——散列表篇

一,基础概念 散列表,英文名是hash table,又叫哈希表。 散列表通常使用顺序表来存储集合元素,集合元素以一种很分散的分布方式存储在顺序表中。 散列表是一个键值对(key-item)的组合,由键(key)和元素值(item)组成。键…