Docker(三)Java项⽬打包成镜像并动态加载配置⽂件和⽇志、⽂件持久化Docker(三)| Java项⽬打包成镜像并动态加载配置⽂件和⽇志、⽂件持久化
背景:
基于springboot的java项⽬
使⽤yml⽂件配置⽇志 或 logback配置⽇志⽂件(⽇志不⽤说,肯定需要持久化的,我们不希望项⽬报错然后容器停⽌了,什么问题都不知道)
连接mysql数据库(连接.介绍的mysql容器)
项⽬会输出txt⽂件(这些⽂件需要持久化)
重点:因为数据库地址或者我们请求外部动态变化的容器地址,肯定是需要配置⽂件去配置的,这样可以⽅便修改,不能和项⽬打包到⼀起,不然地址⼀变就需要重新打包,特⿇烦
前⾔: 配置持久化⽇志和持久保存txt⽂件肯定是需要主机和容器共享同⼀个⽬录才⾏的,.有介绍到⽤-v参数指定容器的持久化的挂载/共享⽬录,可以保证数据不会因为容器停⽌⽽丢失,⽽且可以共享宿主机上的⽂件。废话不多说,直接开撸
1. 在java项⽬中指定⽇志在主机上的绝对路径,两种⽅式:
yml
logback
2. 这⾥在java项⽬中指定输出的txt⽂件持久化,直接配置宿主机路径:
3. 配置数据库地址或外部请求地址,这⾥我直接写的本地,到后⾯修改(后期容器已经运⾏后需要修改配置⽂件,下⾯会说这个问题)
4. 配置完成将项⽬打包成可执⾏jar包
配置好pom⽂件
使⽤IDEA的maven⼯具打包
5. 配置Dockerfile⽂件
FROM java:8
EXPOSE 8900
#VOLUME /tmp
mysql下载jar包
ADD smart.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar","--fig.location=/data/java/l"]
FROM java:8:使⽤jdk8作为基础镜像
EXPOSE 8900:暴露容器的8900端⼝
VOLUME /tmp:创建⼀个容器的挂载⽬录。这⾥我注释了,没有指定,会在后⾯的运⾏命令中指定容
器的挂载点ADD smart.jar app.jar:将复制指定的smart.jar为容器中的app.jar,相当于拷贝到容器中取了个别名
RUN bash -c ‘touch /app.jar’: 创建⼀个新的容器并在新的容器中运⾏命令
ENTRYPOINT[]:相当于在容器中⽤cmd命令执⾏jar包
⼤家不懂Ddockerfile的命令可以参考这个,下载书籍:.
6. 将l⽂件拷贝到上⾯第5步对应的⽬录(/data/java/config)下,下⾯的第9步会挂载此⽬录,⽅便我们修改这个⽂件,
然后重启容器即可重新加载该⽂件
7. 将 Dockerfile⽂件和可执⾏jar包拷贝到linux主机上的同⼀⽬录下
在同⼀个⽬录下使⽤命令:(注意最后⼀个".",表⽰当前⽬录)
docker build -t java/smart:2019.
-t java/smart:2019:表⽰构建成java/smart的镜像名称,tags为2019
如果提⽰错误:“docker build” requires exactly 1 argument.
是因为少了最后⾯的那个点 “.”
8. 查看镜像java/smart是否已经创建好,命令:
docker images
可以看到镜像已经存在
9. 启动容器,命令:(启动后会出现⼀串字符串)
docker run -dit \
--name smart \
-p 8900:8900 \
-v /data/java/server:/data/java/server \
-v /data/java/config:/data/java/config \
-v /data/java/logs:/data/java/logs \
-v /data/java/txt:/data/java/txt \
java/smart:2019
-dit:同时使⽤-d,-i,-t命令
–name java/smart:容器别名,我们还是将容器的别名和镜像名取⼀样的
-p 8900:8900:映射主机和容器之间的端⼝
-v /data/java/logs:/data/java/logs:挂载/共享主机上的/data/java/logs,⽅便持久化⽇志,后⾯就算java/smart容器出错停⽌,我们还是可以通过⽇志查看问题所在
java/smart:2019:指定镜像名称和版本号
PS:容器可以挂载多个⽬录,每个⽬录功能不⼀样
10. 动态查看java/smart容器⽇志
docker logs -f java/smart
不⽤-f只能查看最后⼗⾏的⽇志,-f即代表动态查看⽇志
重点:动态修改配置⽂件问题
由于项⽬需要请求外部的地址,如mysql等,所以项⽬就算打成jar不能修改了,还是要让它扫描外部配置⽂件,这样⽅便我们修改,省去了重复打jar包的时间。
上⾯的第6步已经提到将我们的配置⽂件放到对应的挂载⽬录(/data/java/config)下,对应的容器中运⾏jar包的命令,加载的也是这个⽬录下的⽂件,所以我们修改宿主机上的⽂件,再重启容器即可让它⽣效
1.修改/data/java/config的l⽂件
2.重启容器:docker restart smart
这⾥的重点是保证宿主机和容器进⾏⽬录挂载,然后jar包的运⾏命令中加载的是容器中挂载⽬录下的⽂件。
简单说我们的-v参数后⾯接的冒号前⾯的是宿主机的⽬录,是我们⽅便修改的地⽅,冒号后⾯的是容器的挂载⽬录,程序启动命令是加载容器中的⽬录,⽽不是宿主机的⽬录

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。