首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

SpringBoot+Docker +Nginx 部署前后端项目

编程知识
2024年09月29日 08:29

部署SpringBoot项目(通关版)

一、概述

使用 java -jar 命令直接部署项目的JAR包和使用Docker制作镜像进行部署是两种常见的部署方式。以下是对这两种方式的概述和简要的优劣势分析:

1.1、使用 java -jar 命令直接部署项目的JAR包

概述:

  • 通过 java -jar 直接部署项目的JAR包是最简单直接的部署方式之一。它直接利用了Java的特性,无需额外的容器技术支持。
  • 你可以在命令行中使用 java -jar 启动一个JAR文件,从而运行你的Java应用。

优势:

  • 简单直接:直接使用JVM运行JAR包,无需依赖其他容器技术,部署简单。
  • 适用范围:适用于简单的、单一的应用部署。

劣势:

  • 弹性和隔离性差:直接运行在主机上,没有资源隔离,可能会受到主机环境的影响。
  • 难以管理:难以控制不同版本的应用,无法灵活地管理多个实例。

1.2、使用Docker制作镜像进行部署

概述:

  • 使用Docker可以将应用、运行环境、依赖项等打包到一个镜像中,并在不同环境中进行一致的部署。
  • 通过Docker可以更加方便地管理应用的部署和运行,以及实现多实例部署和水平扩展。

优势:

  • 灵活部署:容器化的应用更易于在不同的环境中部署和运行。
  • 资源隔离:使用容器可以实现资源的隔离和更好的应用安全性。
  • 一致性:Docker镜像提供了可重复、一致的运行环境,解决了“在我的机器上是好的”的问题。

劣势:

  • 学习曲线:引入Docker增加了一定的学习和适应成本。
  • 运维复杂性:需要考虑容器的运行、监控、网络配置等方面的问题,增加了一定的运维复杂性。

综上所述,两种部署方式各有优势和劣势。使用 java -jar 直接部署简单直接,适用于简单的、单一的应用部署;而使用Docker制作镜像进行部署更加灵活,容易实现一致性部署和资源隔离,但需要考虑学习曲线和运维复杂性。

二、使用 java -jar 运行jar 包

使用这个部署方式的优势是:简单,快捷

2.1、CentOS 7 下载安装 Java JDK 17

2.1.1、操作步骤

  1. 利用 wget 下载 Java JDK 17 到 /usr/local/java 安装目录中,并解压缩
## 进入安装目录
cd /usr/local/
## 新建Java安装目录,并进入此目录
mkdir java
cd java/
## 下载JDK
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
## 将安装包解压缩到java目录
tar -zxvf /root/jdk-17_linux-x64_bin.tar.gz
## 进入目录
cd jdk-17.0.4.1/

2.配置环境变量

## 配置环境变量
vim /etc/profile

将下面内容加到该文件的末端

## set java environment
JAVA_HOME=/usr/local/java/jdk-17.0.4.1
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME PATH

3.重新加载该文件使其生效

## 重新加载profile
source /etc/profile

4.至此,Java JDK 17 安装完成,验证 Java 版本

## 查看Java版本
java -version

2.2、运行项目

这个启动就比较简单,找到上传的jar 包,执行命令就行

java -jar yourfile.jar

三、使用docker 制作镜像部署自己项目的jar 包

详细步骤

3.1、安装docke

3.1.1、安装前准备工作

  • 查看服务器系统版本以及内核版本
cat /etc/redhat-release

#查看服务器内核版本
uname -r

这里我们使用的是CentOS 7.4 系统,内核版本为3.10

  • 安装依赖包
 yum install -y yum-utils device-mapper-persistent-data lvm2
  • 设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.2、安装Docker

3.2.1、 Docker版本说明

Docker从17.03版本之后分为两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。
企业版包含了一些收费服务,个人开发者一般用不到,所以我们只需要安装社区版docker-ce版本即可。

3.2.2、 docker-ce安装

yum install -y docker-ce

3.2.3、 动docker并设置开机自启

#启动docker命令
systemctl start docker
#设置开机自启命令
systemctl enable docker
#查看docker版本命令
docker version

3.3、配置阿里云镜像源

docker 镜像源地址默认是国外的,网速慢,并且不配置的话还可以在拉取的时候会报错

3.3.1,首先需要创建阿里云的账号(免费注册),阿里云官网地址: www.aliyun.com

3.3.2,搜索容器镜像加速

3.3.3,找到自己的镜像地址

3.3.4,在 Lunix 里面配置镜像

路径:/etc/docker/daemon.json

如果没有就直接新建一个文件

{
  "registry-mirrors": ["https://XXXX.mirror.aliyuncs.com"]
}

3.3.5,重启保存

#重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker

3.3.6,查看结果

这里就是你阿里云的镜像加速地址

四、创建dockerFile

eip 这个可以改成自己项目的名称,不过后面的命令都需一系列改动

# 使用 OpenJDK 17 作为基础镜像
FROM openjdk:17

# 作者
MAINTAINER admin

# 在容器中创建一个临时文件夹
VOLUME /tmp

# 复制本地的jar文件到容器中,并将其重命名为eip.jar
COPY eip-0.0.1-SNAPSHOT.jar eip.jar

# 更新文件的修改时间
RUN bash -c 'touch /eip.jar'

# 定义容器启动时运行的命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/eip.jar"]

五、构建镜像

在当时目录下根据dockerfile 构建一个eip 的镜像

这里的jar包和dockerfile、必须在同一目录,我这里放在 home目录下,eip 是自己新建的文件夹

 # 构建镜像
 docker build -t eip .
 
 # 查看命令,就会出现生成的镜像
 docker images

结果:

六、配置docker网络

以便宿主机内在同一个网络下的各个容器能够相互通信

# 构建网络名:eip_net
docker network create --driver bridge eip_net

#查找网络的名称或者 ID
docker network ls

#删除网络名(这个不需要执行,这里只是提供)
docker network rm your_network

结果:

七、根据镜像运行容器

# 其中 eipcontainer是容器名   eip_net是网络名       eip是镜像名(刚刚上面生成的)

docker run -d --name eipcontainer --network eip_net -p 8069:8069 eip

# 检查命令
docker ps

结果: 这里我是二次生成,容器名称改了 eipcontainer ==》eip eipcontainer (如下name)

到这里就是成功的:手动利用dockerfile在docker 里面把自己的jar 包打成镜像,并运行容器

这个时候我们也可以访问接口地址,但是前提得自己项目有集成文档

例如:IP+端口/doc.html

综合脚本

如果感觉上面的部署太麻烦,这里提供一个启动脚本,这样每次修改后的代码只需要重新上传jar和重新执行脚本就是最新的代码,而不需上面的复杂流程。

前提:文件必须在同一目录下,并且已经上传Dockerfile 和jar 包


1.

新建 start.sh 脚本

echo "eip startup"

echo "删除容器和镜像"
docker stop $1
docker rm $1
docker rmi $(docker images | awk '/^<none>/ { print $2 }')


echo "构建镜像"
docker build -t eip .

echo "根据镜像构建容器"
docker run -d --name eip --network eip_net -p 8069:8069 eip

echo "eip startup success"

一键执行脚本文件

# 执行命令 eip 表示脚本的$1   8069 表示脚本的$2  类似以参数的方式进行传递
sh start.sh eip 8069

这里没有去拉取仓库的代码,是因为快速部署,这里也是可以优化的点。如果想要拉取代码,一键打包,自动部署,可以参考下面文章:

文章地址:

高端操作: 仓库 + Jenkins + maven + docker + K8S 这样的部署方式,这个算是另一个知识点

其他命令

# 删除镜像
docker rmi 镜像ID
# 删除容器
docker rm 容器ID

#查看镜像
docker images
#查看运行容器
docker ps

#实时查看100行
docker logs -f your_container | tail -n 100
#实时查看
docker logs -f your_container

前端

安装Nginx 可以自行百度

路径:home/eipWeb/nginx

# 上传dist 打包文件
npm run build:stage

一键启动脚本:eipui.sh

#停止并删除容器
docker stop eip_ui
echo "停止容器成功 !"

#
docker rm -f eip_ui
echo "删除容器成功 !"

# 运行容器,并挂
docker run -d -p 7069:80 --name eip_ui -v /home/eipWeb/nginx/dist:/usr/share/nginx/html --restart=always registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx

echo "运行启动容器成功 !"

最后文章有啥不对,欢迎大佬在评论区指点!!!
如果感觉对你有帮助就点赞推荐或者关注一下吧!!!

From:https://www.cnblogs.com/blbl-blog/p/18438840
本文地址: http://www.shuzixingkong.net/article/2389
0评论
提交 加载更多评论
其他文章 从零开始学机器学习——线性和多项式回归
首先给大家介绍一个很好用的学习地址:https://cloudstudio.net/columns 在之前的学习中,我们已经对数据的准备工作以及数据可视化有了一定的了解。今天,我们将深入探讨基本线性回归和多项式回归的概念与应用。 如果在过程中涉及到一些数学知识,大家也不必感到畏惧,我会逐步为大家进行
从零开始学机器学习——线性和多项式回归 从零开始学机器学习——线性和多项式回归 从零开始学机器学习——线性和多项式回归
【VMware VCF】使用 VCF Import Tool 将现有 vSphere 环境导入为 VI 域。
VCF Import Tool 工具使用两种方式来帮助客户将现有的 vSphere 或 vSphere + vSAN 环境转变为 VMware Cloud Foundation 环境,分别是转换(Convert)和导入(Import)。之前在这篇(使用 VCF Import Tool 将现有 vSp
【VMware VCF】使用 VCF Import Tool 将现有 vSphere 环境导入为 VI 域。 【VMware VCF】使用 VCF Import Tool 将现有 vSphere 环境导入为 VI 域。 【VMware VCF】使用 VCF Import Tool 将现有 vSphere 环境导入为 VI 域。
Java实现随机抽奖的方法有哪些
在Java中实现随机抽奖的方法,通常我们会使用类来生成随机数,然后基于这些随机数来选择中奖者。本文给出了几种常见的随机抽奖实现方式,包括从数组中抽取、从列表中抽取以及基于权重的抽奖方式。
win10安装linux的gcc
mysy2下载gcc 过程比较艰苦,2024年秋冬讲课,被linux毒打了3天 pacman -S mingw-w64-ucrt-x86_64-gcc 这个一次成功,不行继续接大招 实在不行安装vsvisualstudio.com 补了gcc的工具链 大小1.5g liunx改名字 改主机名字sud
利用 Page Visibility API 优化网页性能与用户体验
在现代 Web 开发中,用户可能会频繁切换标签页,或让网页处于后台运行。为了避免不必要的资源浪费并提升用户体验,合理利用 Page Visibility API 可以在页面不可见时暂停或减少资源的消耗,并在页面重新可见时恢复正常操作。 在这篇博客中,我将展示如何通过 Page Visibility
【翻译】实现 Blocked Floyd-Warshall 用于解决所有对最短路径问题 C# 实现
介绍 在之前的帖子中,我们实现了Floyd-Warshall(弗洛伊德-沃沙尔算法)(四种变体)以及路由重建算法。在这些帖子中,我们探讨了所有对最短路径问题的基本概念、内存中的数据表示、并行性、向量化以及如何将算法调整为适应数据特性。 在本帖中,我们将继续我们的旅程,探索一种更高效的方法来解决所有对
【翻译】实现 Blocked Floyd-Warshall 用于解决所有对最短路径问题 C# 实现 【翻译】实现 Blocked Floyd-Warshall 用于解决所有对最短路径问题 C# 实现 【翻译】实现 Blocked Floyd-Warshall 用于解决所有对最短路径问题 C# 实现
关于虚树
关于虚树 \(\large 9.29\ upd:\) 更新了二次排序。 瞎扯 某些树上问题,给了巨多节点,而实际上它们之中只有小部分能做出贡献,其余都是些水军,为杀尽 OIers的脑细胞 做出努力 考虑重新种一棵树,浓缩信息,简化节点个数,于是产生了 虚树。 大概是长这个样子: 红色结点是我们选择的
关于虚树 关于虚树 关于虚树
.NET 跨平台工业物联网网关解决方案
前言 随着工业4.0时代的到来,物联网技术正在以前所未有的速度改变着我们的生产和生活方式。本文给大家介绍一个基于 .NET 6 开发的跨平台工业物联网网关解决方案。 工业物联网(IIoT)成为了连接物理世界与数字世界的纽带。而在这个网络中,工业物联网网关就像是一个智能的交通警察,负责指挥着设备与云端
.NET 跨平台工业物联网网关解决方案 .NET 跨平台工业物联网网关解决方案 .NET 跨平台工业物联网网关解决方案