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的配置文件,在里面可以記錄

<property name="LOG_PATH" value="./prologs" />
即會在當前目錄下記錄日志了。 這一段羅里吧嗦的其實和docker沒啥關系,主要spring boot在生產環境上自定義日志配置文件位置的問題。
 
好了,現在執行以下命令可以 進入到運行中的docker 容器里去:
docker exec -it <容器ID> bash

bash是固定寫法,據說也可以是/bin/bash和/bin/sh,本人沒試了。進去后,就可以看到生成了一個日志文件夾了。

 

日志持久化

還有個問題,這些日志記錄了也只存在於容器里,容器沒了的時候日志也就沒了。可以解決,我了解兩種方式,也就是docker官方推薦的兩種數據管理方式:
1、運行的時候使用如下命令:
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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM