Docker如何部署SpringBoot应用
Docker如何部署SpringBoot应用
这篇文章主要为大家展示了“Docker如何部署SpringBoot应用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Docker如何部署SpringBoot应用”这篇文章吧。
前言
部署项目时可能会需要依赖于node.js、Redis、RabbitMQ、MySQL等,这些服务部署时所需要的函数库、依赖项各不相同,甚至会有冲突。给部署带来了极大的困难。而Docker确巧妙的解决了这些问题,Docker为了解决依赖的兼容问题的,采用了两个手段:
将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包
将每个应用放到一个隔离容器去运行,避免互相干扰
本文将讲解如何使用Docker来部署我们平时用SpringBoot开发的项目:
Dockerfile
什么是 Dockerfile?
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
Dockerfile语法
构建自定义的镜像时,并不需要一个个文件去拷贝,打包。
我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。
而描述上述信息的文件就是Dockerfile文件。
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。
打包SpringBoot项目
准备项目:
项目端口
server.port=8080
在templates文件夹下新建index.html
<!DOCTYPEhtml><htmllang="en"xmlns:th="http://www.thymeleaf.org"><head><metacharset="UTF-8"><title>Docker部署SpringBoot应用</title></head><body><h2>Docker部署SpringBoot应用</h2><imgsrc="/static/img/2.jpg"alt=""width="100%"></body></html>
定义主页Controller,跳转到index
@ControllerpublicclassindexController{@RequestMapping("/")publicStringindex(){return"index";}}
在本地预览效果:
在本地将SpringBoot应用打包成jar
准备maven-compiler-plugin插件
<build><!--编译打包后的文件包名--><finalName>app</finalName><plugins><plugin><!--GAV坐标(G组织id,A项目id,V版本号)--><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><!--配置:一般而言,target与source是保持一致的,但是,有时候为了让程序能在其他版本的jdk中运行(对于低版本目标jdk,源代码中不能使用低版本jdk中不支持的语法),会存在target不同于source的情况--><configuration><!--源代码使用的JDK版本--><source>1.8</source><!--需要生成的目标class文件的编译版本--><target>1.8</target><!--字符集编码,防止中文乱码--><encoding>UTF-8</encoding></configuration></plugin></plugins></build>
maven是个项目管理工具,如果不告诉它代码要使用什么样的jdk版本编译,它就会用编译插maven-compiler-plugin默认的jdk版本来处理,这样就容易出现版本不匹配的问题,以至于可能导致编译不通过的问题。例如代码中要是使用上了Java8的新特性,比如函数式编程,但是maven在编译的时候使用的是Java7,那这一段代码是完全不可能编译成.class文件的。为了避免出现这种情况,在构建maven项目的时候,我习惯性第一步就是配置maven-compiler-plugin插件,指定项目源码的jdk 版本,编译后的 jdk 版本,以及编码方式。
然后执行clean,最后执行package进行项目打包
出现BUILD SUCCESS说明打包成功了
打包成功后会出现target文件夹,目录下就会有刚刚打包的jar包
准备jar包和Dockerfile
复制jar到桌面或自定义位置,在本地创建编写Dockerfile文件(注:名字必须为Dockerfile,去掉后缀名)
编写Dockerfile
Dockerfile指令
FROMjava:8-alpineCOPY./app.jar/tmp/app.jarENTRYPOINTjava-jar/tmp/app.jar
Dockerfile说明
FROM java:8-alpine:
基于java8构建镜像,默认构建java镜像需要安装配置环境变量,而java:8-alpine这个镜像已经帮我们把前面的步骤都做完了
COPY ./app.jar /tmp/app.jar
复制jar包
ENTRYPOINT java -jar /tmp/app.jar
入口命令
使用工具将jar和Dockerfile上传到服务器
上传位置看个人,我存放的位置:/tmp/docker
cdtmpmkdirdocker
选择上传文件
上传到/tmp/docker
目录下
构建镜像
进入上传文件的目录:cd /tmp/docker
,输入ls
查看文件
输入命令构建镜像
dockerbuild-ttest:1.0.
格式:docker build -t 镜像名称:版本号 Dockerfile所在目录路径
命令说明:
build
:docker的二级命令
构建镜像
-t
-名称: 一般的镜像名称格式:名称:版本号(
test:1.0
)
.
Dockerfile所在目录,因为我们已经进入了Dockerfile所在的目录,
.
代表当前目录
可以看到构建镜像的时候会以我们编写Dockerfile的三条命令分为3个步骤执行
查看镜像
查看Docker中的镜像命令:
dockerimages
可以看到我们自定义镜像test
创建并运行容器
运行Docker镜像命令:
dockerrun--namespringboot-p8080:8080-dtest:1.0
命令说明:
docker run
: docker二级命令
创建并运行容器
--name
定义容器名称,后面跟上容器名称(
springboot
)
-p
端口映射
左边端口为Linux的端口 ,右边为容器的端口号
将linux端口映射在容器端口号上,这样访问linux端口等于访问容器端口号
-d
后台运行容器 ,否则退出之后容器就会停止运行
test:1.0
–>镜像名称
选择自定义镜像
test
的1.0版本来创建容器
创建并运行容器成功!
查看正在运行的镜像
正在运行的镜像命令
dockerps
浏览器访问服务器的8080端口
手机访问:
查看日志
查看容器日志命令
dockerlogs-fspringboot
说明:
查看容器日志但是不是实时更新,想要查看新的日志还需要重复运行
dockerlogs+容器名称
实时更新日志
dockerlogs-f+容器名称
以上是“Docker如何部署SpringBoot应用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
-
vue动态添加删除输入框(springboot vue怎么让数据库显示出来)
springbootvue怎么让数据库显示出来?一般情况下是前端调阅后端接口,来获取到数据库的数据,后端哪里会把数据库的数据整理...
-
jenkins(docker 最佳实践 小团队devops如何落地)
小团队devops如何落地?我司之前小团队java技术站CI/CD路线,基于阿里云自建整体原则:先测什么后生产出来,先边缘后核心具...
-
Zend Studio使用教程:在Docker容器中调试PHP Web应用(三)
-
「docker+gdb」调试 PHP 源码,看 strva
-
使用laradock创建laravel本地开发环境
-
Docker PHP 入门实践(一)
-
docker配置PHP本地开发环境「php+nginx+mysql」
-
如何在CentOS 7上安装和使用Docker Compose
-
docker中运行php文件
-
用 Laradock搭建本地 PHP 容器开发环境&宝塔Docker一键部署