功能问题:如何用Docker部署一个后端项目?

大家好,我是大澈!

本文约1800+字,整篇阅读大约需要3分钟。

关注微信公众号:“程序员大澈”,免费加入问答群,一起交流技术难题与未来!

现在关注公众号,免费送你 ”前后端入行大礼包“ ,包含了:前后端面试题、面试技巧、简历模版、前后端学习路线图、前后端全技术栈学习笔记。

1. 问题速览

最近,推文内容想着从 前端领域 向 前后端领域 转型。

出发点呢,为了更多的给大家分享,为了自己也能学到更多知识,更为了可以认识更多的同行朋友,一起交流技术难题与未来!

所以,仅针对最近许多问我个人项目部署方面问题的朋友,今天分享一下如何用Docker部署一个SpringBoot后端项目。

学习中编写,不足之处朋友们多多指教哈哈。

图片

2. 问题详细

5步聊聊Docker部署后端个人项目过程,最后做小结。

2.1 编写一个接口

创建一个SpringBoot项目,编写一个接口。

@RestController
@RequestMapping("/test")
public class TestController {@GetMapping("/api")public String detail() {return "后端部署成功";}
}

下面再编写两个配置文件,以便于区分开发与生产环境的配置。

application.yml 开发环境配置示例:

mybatis-plus:global-config:db-config:logic-delete-field: isDeleted # 全局指定逻辑删除字段logic-delete-value: 1 # 逻辑删除后的值logic-not-delete-value: 0 # 没有删除的值mapper-locations: classpath*:mapper/*.xml # mapper.xml位置

application-online.yml 生产环境配置示例:

server:port: 9898spring:redis:host: redisport: 6379database: 1datasource:username: rootpassword: Xp@199866driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://mysql:3306/myblog?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8

2.2 编写Dockerfile

在项目根目录下(一般放这)或其它位置,编写Dockerfile文件。

注意,文件名字必须叫Dockerfile,当然也能自定义,但不建议。

编写它的目的,是为了把本地打的项目jar包在服务器上制作成Docker镜像,方便后面运行成容器进行管理。

下面是Dockerfile文件内容:

# 基础镜像 JDK8 一般不需要改
FROM eclipse-temurin:8
# 作者 需要改
MAINTAINER dache
# 工作目录 一般不需要改
WORKDIR /usr/local/java
# 同步docker内部的时间 一般不需要改
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 设置时区和端口号 需要改
ENV TZ=Asia/Shanghai
EXPOSE 9898
# 复制jar包到/user/local/java下 需要改
ARG JAR_FILE
ADD ${JAR_FILE} ./bili.jar# 指定配置文件、jar包、日志的位置 需要改
ENTRYPOINT ["nohup","java","-Dspring.profiles.active=online","-Dspring.config.location=/usr/local/java/application.yml,/usr/local/java/application-online.yml","-jar","/usr/local/java/bili.jar",">","/usr/local/java/bili.log","&>","&"]

2.3 制作Docker镜像

在本地编写完Dockerfile文件之后,我们就要去服务器中制作Docker镜像。

通过远程控制工具 Termius(现在一般用这个)或 Xshell ,创建java文件夹,将配置文件、jar包、Dockerfile等文件上传,再运行Docker制作镜像的命令,完成jar包镜像制作。

制作Docker镜像命令如下:

docker build -t bili:1 .

-t 指的是Tag名,指的是镜像版本号,指的是在当前目录去找Dockerfile文件。

2.4 创建Docker网络并运行容器

创建Docker网络的目的,是因为在Docker中,同一网络下的容器间,可以通过名字来互相访问。

默认情况下,Docker不支持容器名互相访问,所以要创建Docker网络。

创建Docker网络的命令如下:

docker network create bili

然后,再在同一网络中分别运行mysql、redis、jar包等镜像,实现多服务容器化。

当然,重要的前提是,你已经在服务器创建了数据库、暴漏了端口等前置必要工作!

运行mysql镜像命令示例:

docker run -d --name mysql -v mysqldata:/var/lib/mysql -v mysqlconf:/etc/mysql/conf.d -v mysqllog:/var/log/mysql -p 3306:3306 --network bili -e MYSQL_ROOT_PASSWORD=Xp@199866 mysql:8

运行redis镜像命令示例:

docker run --name redis --network bili -p 6379:6379 -d redis:latest

运行jar包镜像命令示例:

docker run -d -it --name bili --network bili -v /usr/local/java:/usr/local/java -p 9898:9898 bili:1

这里最后再补充一下,对上面Docker命令的几个说明:

-d 后台运行
–name 容器名
-v 数据卷
-p 端口映射
–network 网络指定
-e 环境配置,这里指定了root用户的密码

2.5 接口测试

用浏览器或任意一个我之前在 实用干货文章 中推荐过的接口测试工具,调一下接口,成功响应即部署成功!

图片

2.6 小结

今天给大家分享了,如何用Docker部署一个SpringBoot后端项目,分了算是5步说明吧。

本文比较偏向于前端同行或后端小白朋友,当然对于后端大佬们来说,比较轻松了。

但不管怎么样,希望大澈今天的分享,能够帮助到有需要的朋友。

结语

  • 我是大澈,一个喜欢交朋友、喜欢分享、喜欢搞钱的90后小伙。

  • 文章主分享前后端功能问题实现、次分享技术资讯、实用干货。

  • 遇到技术难题,在问答群里与众多同行朋友一起讨论成长。

关注微信公众号:“程序员大澈”,免费加入问答群,一起交流技术难题与未来!

现在关注公众号,免费送你 ”前后端入行大礼包“ ,包含了:前后端面试题、面试技巧、简历模版、前后端学习路线图、前后端全技术栈学习笔记。

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

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

相关文章

SwiftU的组件 - TabView

SwiftU的组件 - TabView 记录一下SwiftU的组件 - TabView的两种style分别的使用方式 import SwiftUIstruct TabViewBootCamp: View {State var selectedIndex 0var body: some View {NavigationView {TabView(selection: $selectedIndex) {HomeView(selectedIndex: $selected…

基于python的《彩图版飞机大战》程序使用说明(附源码下载)

在PyCharm中运行《彩图版飞机大战》即可进入如图1所示的游戏界面。 图1 游戏主界面 具体的操作步骤如下: (1)玩游戏。在游戏主界面中,从屏幕的顶部不断出现下落的敌机,玩家按下键盘上的↑、↓、←、→方向键移动飞机…

Android 深入Http(2)加密与编码

可以对二进制数据(比如图片、视频) 经典算法: DES(密钥短被弃用了) AES (密钥很长 很顶) 速度快,效率高 IDEA 3DES(三重DES,听起来就很慢和重 &#xf…

VGG论文学习笔记

题目:VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION 论文下载地址:VGG论文 摘要 目的:研究深度对精度的影响 方法:使用3*3滤波器不断增加深度,16和19效果显著 成绩:在ImageNet 20…

搭建知识管理系统并不复杂,这篇教程来帮你

许多人都有这样的体验:我们抓住的想法和知识总在不经意间溜走,我们想要的信息总是一时无法找到。因此,搭建一个能够系统化、分类和索引存储这些知识的“知识管理系统”是必要的。听上去很专业,其实并不复杂,让我们一步…

mysql: 如何开启慢查询日志?

1 确认慢查询日志功能已开启 执行以下sql语句,查看慢查询功能是否开启: show VARIABLES like slow_query_log;如果为ON,表示打开;如果为OFF,表示没有打开,需要开启慢查询功能。 执行以下sql语句&#xff0…

修改 MySQL update_time 默认值的坑

由于按规范需要对 update_time 字段需要对它做默认值的设置 现在有一个原始的表是这样的 CREATE TABLE test_up (id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 主键id,update_time datetime default null COMMENT 操作时间,PRIMARY KEY (id) ) ENGINEInnoDB DEF…

MapStruct代替BeanUtils.copyProperties ()使用

1.为什么MapStruct代替BeanUtils.copyProperties () 第一:因为BeanUtils 采用反射的机制动态去进行拷贝映射,特别是Apache的BeanUtils的性能很差,而且并不支持所有数据类型的拷贝,虽然使用较为方便,但是强烈不建议使用…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:NavRouter)

导航组件,默认提供点击响应处理,不需要开发者自定义点击事件逻辑。 说明: 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 必须包含两个子组件,其中第二个子组…

分析型数据库的主要使用场景有哪些?

如今数据已经成为了企业和组织的核心资产。如何有效地管理和利用这些数据,成为了决定竞争力的关键。分析型数据库作为数据处理领域的重要工具,为各行各业提供了强大的数据分析和洞察能力。基于分析型数据库(Apache Doris )构建的现…

当模型足够大时,Bias项不会有什么特别的作用

问题来源: 阅读OLMo论文时,发现有如下一段话: 加上前面研究llama和mistral结构时好奇为什么都没有偏置项了 偏置项的作用: 回到第一性原理来分析,为什么要有偏置项的存在呢? 在神经网络中,…

跨境热点!TikTok直播网络要求是什么?

TikTok直播作为一种互动性强、实时性要求高的社交媒体形式,对网络环境有着一系列特定的需求。了解并满足这些需求,对于确保用户体验、提高直播质量至关重要。本文将深入探讨TikTok直播对网络环境的要求以及如何优化网络设置以满足这些要求。 TikTok直播的…

mac启动elasticsearch

1.首先下载软件,然后双击解压,我用的是7.17.3的版本 2.然后执行如下命令 Last login: Thu Mar 14 23:14:44 on ttys001 diannao1xiejiandeMacBook-Air ~ % cd /Users/xiejian/local/software/elasticsearch/elasticsearch-7.17.3 diannao1xiejiandeMac…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Menu)

以垂直列表形式显示的菜单。 说明: 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 Menu组件需和bindMenu或bindContextMenu方法配合使用,不支持作为普通组件单独使用。 子组件 包含MenuIt…

HTML—CSS盒子模型(Box Model)

基本介绍: CSS处理网页时,HTML的每一个标签可以看作是一个盒子,网页布局将指定的标签放到指定的位置上摆放,相当于摆放盒子。 每一个标签(盒子)所包含的内容:从外到内 ①外边距(margin)—规定盒子与盒子之间的距离&…

LeetCode---388周赛

题目列表 3074. 重新分装苹果 3075. 幸福值最大化的选择方案 3076. 数组中的最短非公共子字符串 3077. K 个不相交子数组的最大能量值 一、重新分装苹果 注意题目中说同一个包裹中的苹果可以分装,那么我们只要关心苹果的总量即可,在根据贪心&#x…

为什么光学器件需要厚度

确定光学厚度的限值 光学元件的功能和性能在很大程度上受到可用光学材料的限制。制造和光学元件设计的最新发展现在拓宽了可以实现的目标。特别是,平面光学器件或超表面可以设计为具有大块光学元件的功能,但其厚度缩小到仅几百纳米。米勒现在提出了一项…

git小白入门

git是什么 Git是一种流行的版本控制系统,被广泛用于软件开发中来跟踪和管理代码的变化。它是由Linus Torvalds在2005年创建的,最初的目的是为了更高效地管理Linux内核的开发。Git使得多人在同一个项目上工作变得更加简单,可以轻松合并不同开…

人工智能入门学习笔记1:什么是人工智能

一、什么是人工智能 人工智能(Artificial Intelligence),是一个以计算机科学(Computer Science)为基础,由计算机、心理学、哲学等多学科交叉融合的交叉学科、新兴学科,研究、开发用于模拟、延伸和扩展人的智能的理论、…

Centos8安装Docker,使用阿里云源

一、前期准备 1.关闭防火墙,SELINUX systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0 sed -i "s/SELINUXenforcing/SELINUXdisabled/g" /etc/selinux/config查看状态 systemctl status firewalld systemctl status…