dockerfile暴力处理配置文件外提

文章介绍了如何在Springboot应用中处理特定配置文件的外提,特别是在有定制化jar包需求时。通过使用jar命令更新jar包内的配置文件,并结合Dockerfile和setup.sh脚本来实现配置文件的外部挂载。在Docker部署时,利用volume映射宿主机目录,确保配置文件在容器内生效。
摘要由CSDN通过智能技术生成

前言:

一般来说,springboot打成的jar运行时,同目录/config目录下放application.yml文件会被进行加载,然后通过设置docker映射出宿主机即可做到配置文件外配的效果,但很多时候别的配置文件做不到这种效果,说一种较为极端的例子,对接定制化开发时,需要引入客户定制化的jar包,此时,jar包中的代码强制指定resources目录下对应它的配置文件,那么我们外提了配置,制定化的jar包中就无法获取到该配置文件了。此时,如果我们用docker进行部署(jar直接执行其实按下面步骤也是可以的),可以采用dockerfile来实现相关外提

一、了解jar的相关命令

jar -uvf /mqtt-transfer.jar /BOOT-INF/classes/iotagent.properties

该命令的意思是:将/BOOT-INF/classes/iotagent.properties的文件更新到mqtt-transfer.jar对应解压后/BOOT-INF/classes/iotagent.properties中

注意:/BOOT-INF/classes/iotagent.properties不仅仅指代jar包中的目录,还指代当前文件的目录文件

/BOOT-INF/classes/目录就是对应resources目录下的配置文件所在位置

相信你此时已经有了思路,如果我们只是通过java -jar来运行项目,那么想要外提配置,让配置生效,可以先将需要外提的配置文件放到/BOOT-INF/classes/目录下(window系统随便一个盘在根目录创建/BOOT-INF/classes/即可),然后执行jar -uvf 命令即可

二、对于docker部署配置外提

做一些前置操作,dockerfile内容如下:

# 该镜像需要依赖的基础镜像
FROM openjdk:8-jdk-alpine
# 声明服务运行在9300端口
EXPOSE 9300
# 将target目录下的jar包复制到docker容器的/目录下
ADD ./target/mqtt-transfer.jar mqtt-transfer.jar
# 指定临时文件目录
VOLUME /tmp
# 项目配置的日志文件目录
VOLUME /logs
# 项目配置的config目录
VOLUME /config
# 将当前目录下的setup.sh复制到docker容器的/目录下
ADD ./setup.sh setup.sh
# 指定docker容器启动时运行
ENTRYPOINT ["sh", "/setup.sh"]
# 指定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 指定维护者的名字
MAINTAINER henyi

我的项目是采用jdk8运行,具体根据项目配置

这里需要关注的是ENTRYPOINT ["sh", "/setup.sh"]这个命令,该命令是容器只要每次启动,都会执行setup.sh脚本

setup.sh脚本如下:

#!/bin/bash
jar -uvf /mqtt-transfer.jar /BOOT-INF/classes/iotagent.properties

java -jar /mqtt-transfer.jar

此时,我们已经完成了项目配置外提,dockerfile创建了镜像后,创建容器时我们还需要映射一下文件目录,因为此时我们只是把项目相关的配置放到了容器里,需要映射到宿主机目录

docker run -d -p 9300:9300 \
-v /home/logs:/logs \
-v /home/tmp:/tmp \
-v /home/config:/config \
-v /home/iotagent.properties:/BOOT-INF/classes/iotagent.properties \
--name=mqtt-transfer --restart=always 创建的镜像id

相关的映射我们都映射到了home目录,执行命令之前先在对应的目录创建好配置文件,启动即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值