centos7上部署spring boot
Posted 冷暖自知~~~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了centos7上部署spring boot相关的知识,希望对你有一定的参考价值。
不难,记录备忘:
一、有centos7的机器
可用Virtualbox安装centos虚拟机:https://www.centos.org/download/
二、机器上安装有docker
参考文章:https://www.cnblogs.com/yufeng218/p/8370670.html
三、在自己机器上把spring boot项目打包成一个可执行jar包
我本地用的maven构建,官方支持的一套东西,运行mvn package直接就打包好了,打包步骤略过
四、建Dockerfile
# 指定一个基础镜像centos FROM docker.io/centos:latest WORKDIR /app #安装应用执行的环境java RUN yum -y install java #将目录下的文件复制到容器中 COPY . /app #执行jar文件 ENTRYPOINT ["java" ,"-jar","xxx.jar"]
五、准备好的文件有这些:
- Dockerfile
- application.properties
- logback-spring.xml
- xxx.jar
统一弄到前面准备好的centos上去,可以直接在根目录下建一个app文件夹,把东西放进去
六、构建自己的镜像,xxx是为项目的docker镜像命名,"."表示当前目录(应该是表示Dockerfile在当前目录下?本人还没弄清):
docker build -t xxx .
七、镜像做好后,可以查看一下:
docker images
八、运行镜像,-d表示后台运行,-p表示端口映射(如下是表示外部访问 centos机器IP:80,即可访问到spring boot在docker里运行所监听的8080端口),xxx即第六步定义的docker镜像名:
docker run -d -p 80:8080 xxx
存在的一些问题:
spring boot项目,一般都用logback记录日志。而且开发的时候一般会有一个 logback-spring.xml 文件在 resources 下,表示要记录什么日志,以及记录在硬盘哪个位置。但是开发时候日志的路径,肯定和centos服务器上的docker里的路径不一样啊,所以肯定不能用开发时的 logback-spring.xml 。不过刚刚mvn打包时,把logback-spring.xml 也打包进去了,如果在服务器上不给个专门的logback-spring.xml ,那就用的开发时的了。所以要指定。
在.jar文件所在的位置,可以放置application.properties ,里面就包括 logging.config=./logback-spring.xml ,这样就使用.jar的同级目录下的logback-spring.xml作为logback的配置文件,在里面可以记录
docker exec -it <容器ID> bash
bash是固定写法,据说也可以是/bin/bash和/bin/sh,本人没试了。进去后,就可以看到生成了一个日志文件夹了。
日志持久化
docker run -d -p 80:8080 -v logVolume:/app/prologs xxx
-v表示使用volume,docker官方指定的三种数据管理方式之一,也是推荐的方式。
这条命令是告诉docker,在这个容器运行时,将会创建一个路径,叫/app/prologs,而且这个路径,在docker外面,实体的centos上也可以访问,并且不会随着容器停止和删除而且消失。这样一来,docker里面程序操作过的文件,比如写过的日志,就保留下来了。不过官方文档倒是没有提到过这种 use case。
这个在docker里面看是 /app/prologs 路径,而在外面也可以访问的东西就叫做volume,这条命令新建了一个名叫 logVolume 的 volume,也可以用这条命令查看一共有哪些volume:
docker volume ls
那在docker外面查看这些个东西呢?
先运行:
docker inspect <容器ID>
找到 Mounts 节点,下面有个Source,即为可以在docker外部访问的目录,如:/var/lib/docker/volumes/logVolume/_data,cd到这里面就可以看到对应的内容了。
2、运行如下命令:
docker run -d -p 800:8080 -v "$(pwd)"/prologs:/app/prologs xxx
和上一条命令有点类似,唯一不同的,就是-v后面到冒号前面这一段文本,这里的这段文本表示的是当前目录下的 prologs 路径,这种情况,日志文件就会出现在当前目录下的 prologs 路径里了。
虽然使用方式类似,但是概念上不一样,官方称第一种方式为 Volumes ,第二种方式称为 Bind mounts。
至此,问题基本解决。
脚本:
# 关闭所有正在运行容器 docker ps | awk \'{print $1}\' | xargs docker stop # 删除所有容器应用 docker ps -a | awk \'{print $1}\' | xargs docker rm # 或者 docker rm $(docker ps -a -q)
以上是关于centos7上部署spring boot的主要内容,如果未能解决你的问题,请参考以下文章
在CentOS 7上安装docker,部署spring boot