今天看啥  ›  专栏  ›  花伤情犹在

Docker部署SpringBoot应用

花伤情犹在  · CSDN  ·  · 2020-01-01 00:00

前言

部署项目时可能会需要依赖于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
  • 1
  • 1

在templates文件夹下新建index.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Docker部署SpringBoot应用</title>
</head>
<body>
<h1>Docker部署SpringBoot应用</h1>
<img src="/static/img/2.jpg" alt="" width="100%">
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

定义主页Controller,跳转到index

@Controller
public class indexController {

    @RequestMapping("/")
    public String index(){
        return "index";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在本地预览效果:
在这里插入图片描述

在本地将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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

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指令

FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
ENTRYPOINT java -jar /tmp/app.jar
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

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

cd tmp
mkdir docker
  • 1
  • 2
  • 1
  • 2

选择上传文件
在这里插入图片描述
上传到 /tmp/docker 目录下
在这里插入图片描述

构建镜像

进入上传文件的目录: cd /tmp/docker ,输入 ls 查看文件
在这里插入图片描述
输入命令构建镜像

docker build -t test:1.0 .
  • 1
  • 1

格式:docker build -t 镜像名称:版本号 Dockerfile所在目录路径

命令说明:

  • build :docker的二级命令
    • 构建镜像
  • -t
    -名称: 一般的镜像名称格式:名称:版本号( test:1.0 )
  • .
    • Dockerfile所在目录,因为我们已经进入了Dockerfile所在的目录, . 代表当前目录

可以看到构建镜像的时候会以我们编写Dockerfile的三条命令分为3个步骤执行
在这里插入图片描述

查看镜像

查看Docker中的镜像命令:

docker images
  • 1
  • 1

可以看到我们自定义镜像test
在这里插入图片描述

创建并运行容器

运行Docker镜像命令:

docker run --name springboot -p 8080:8080 -d test:1.0
  • 1
  • 1

命令说明:

  • docker run : docker二级命令
    • 创建并运行容器
  • --name
    • 定义容器名称,后面跟上容器名称( springboot )
  • -p 端口映射
    • 左边端口为Linux的端口 ,右边为容器的端口号
    • 将linux端口映射在容器端口号上,这样访问linux端口等于访问容器端口号
  • -d
    • 后台运行容器 ,否则退出之后容器就会停止运行
  • test:1.0 –>镜像名称
    • 选择自定义镜像 test 的1.0版本来创建容器

创建并运行容器成功!
在这里插入图片描述

查看正在运行的镜像

正在运行的镜像命令

docker ps
  • 1
  • 1

在这里插入图片描述

浏览器访问服务器的8080端口

在这里插入图片描述
手机访问:
在这里插入图片描述

查看日志

查看容器日志命令

docker logs -f springboot
  • 1
  • 1

说明:

查看容器日志但是不是实时更新,想要查看新的日志还需要重复运行

docker logs + 容器名称
  • 1
  • 1

实时更新日志

docker logs -f + 容器名称
  • 1
  • 1

在这里插入图片描述

Docker部署SpringBoot应用教程结束!




原文地址:访问原文地址
快照地址: 访问文章快照