Doker部署springBoot项目

今天我们分享一个小知识点——docker部署springboot项目,之所以说它是个小知识点,是因为内容不多,而且也很简单,内容主要包含两个方面,一个是基于docker构建springboot项目的镜像,一个就是用docker启动我们的springboot项目镜像。

编写Dockerfile文件

首先,我们要编写这样一份Dockfile,文件名就就是Dockerfile,没有后缀名,这个文件在项目的根目录下,可以先看我的项目结构:

Doker部署springBoot项目

然后在Dockerfile中写入如下内容,项目不同,配置有所不同,可根据自己的需要进行修改:

# Docker image for springboot file run
# VERSION 0.0.1
# Author: eangulee
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER syske <715448004@qq.com>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp 
# 将jar包添加到容器中并更名为springboot-learning.jar
ADD target/springboot-learning-0.0.1-SNAPSHOT.jar /springboot-learning.jar 
# 运行jar包
RUN bash -c 'touch /springboot-learning.jar'
ENV TZ 'Asia/Shanghai'
EXPOSE 8089
ENTRYPOINT ["java","-jar","/springboot-learning.jar"]

这里简单介绍下这个文件的结构。

FROM的作用是指定项目的运行环境,这里我们指定的是java8;

VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。该步骤是可选的,如果涉及到文件系统的应用就很有必要了。

/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
项目的 jar 文件作为 springboot-learning.jar添加到容器的
ENTRYPOINT 执行项目 springboot-learning.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 /dev/./urandom作为 Entropy Source

ADD就是将我们编译的jar文件添加到容器中,这里可以知道加入容器的文件名;

RUN bash -c就是运行shell命令;

ENV作用是这是环境变量,这里设置的是时区;

EXPOSE的作用是指定容器运行端口;

ENTRYPOINT的作用是指定容器运行命令,指定之后,容器运行的时候就会执行我们指定的命令;

关于Dockerfile编写,可以参考菜鸟教程:

https://www.runoob.com/docker/docker-dockerfile.html

项目打包

在编写Dockerfile的时候,我们指定了jar文件的名字,所以在运行Dockerfil之前,我们要先打包好项目的jar文件,确保Dockerfile中指定的jar文件已经编译好:

Doker部署springBoot项目

打包完成后,我们就可以制作我们的springboot项目的镜像了。

制作镜像

首先确保本地docker已经启动,然后在项目根目录,即Dockerfile所在目录

Doker部署springBoot项目

执行如下命令:

docker build -t springboot-learning:v1 .

-t 参数是指定此镜像的tag名,一般通常就是项目名:版本号。注意最后面的.,不要忘记了。

如果有如下提示,则表面springboot项目的镜像构建完成,如果你是第一次构建,要拉取java8的镜像,所以时间可能会比较长:

Doker部署springBoot项目

然后我们可以通过下面的命令查看本地镜像:

docker images

其中就有我们刚刚构建完成的镜像:

Doker部署springBoot项目

启动springboot镜像

启动我们构建的镜像与启动其他镜像没有本质区别,只是我们在指定端口的时候,容器的端口就是我们前面构建时指定的端口:

docker run --rm --name springboot-learning -p 8089:8089 springboot-learning:v1

另外这里的镜像版本号,也要和构建文件保持一致。回车之后,你就会看到熟悉的springboot启动日志信息:

Doker部署springBoot项目

这里我为了方便查看,没有加-d(后台运行),所以你ctrl+c后,容器会自动停止,一般我们线上运行都是后台运行的。

测试

我的项目中有测试的controller,我们浏览器访问下看看:

Doker部署springBoot项目

Doker部署springBoot项目

和我们直接在本地java -jar启动一样,没有任何区别。

最后,简单总结下,最近一段时间,我们分享了很多云生态相关的知识,包括dokcerk8s等比较主流的技术,让包括我在内的各位小伙伴对java云生态有了一些初步的认识和了解。

然后再加上我们今天分享的springboot项目镜像构建,现在这一连串的技术已经差不多全都被我们串起来了,可以这样说,如果这些知识你自己都有动手做过,都有实践过,那你对目前主流的云生态应该已经有了最基本的认知,至少在使用和应用方面没有太多的问题。
后面我们再分享下kuboard的用法,我们的springboot项目就可以运行在k8s中了,然后剩下的更细节的知识点就靠各位小伙伴自己去探索学习了。好了,今天的内容就到这里了。

上一篇:日常SQL数据库死锁跟踪及处理


下一篇:Doker命令