docker通过dockerfile构建spring boot项目

前言

最近在新公司有分享到有关docker的东西,自己最近也有重新学习了一些东西。之前对于dockerfile自己一直有一种畏惧的心态,虽然一直看得懂,但是就是有一种说不上来的不自信,也几乎不写dockerfile。然后刚好趁着这个机会重新整理一下docker有关的新的知识

前期准备

既然是要启动一个spring cloud的项目,那么自然需要准备一个eureka的,这边可以参照我之前搭建过的eureka项目
eureka搭建

dockerfile的一般使用

这个是我的eureka的docker启动的dockerfile,但是里面其实是有点问题的

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD eureka.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

问题

我们通过docker exec 进入镜像之后,使用top。会发现java的进程占据了pid=1的位置。没法用jstack或者arthas这种工具进行分析,非常影响使用体验。

解决方法

使用一个shell脚本启动对应的java进场,这样shell脚本会占据pid的位置,或者直接让/bin/bash占据pid为1的进程位置。

具体过程

在这里插入图片描述
准备4个文件,一个dockerfile,一个jdk版本,一个srping boot jar包,一个sh脚本
dockerfile

FROM centos:7
#准备一个centos镜像
VOLUME /tmp
#挂载一个位置
ADD jdk-8u221-linux-x64.tar.gz /usr/local/
#复制jdk版本
ENV JAVA_HOME /usr/local/jdk1.8.0_221
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
#设置java环境变量
ADD service-hi.jar app.jar
#复制jar包
ADD my-start.sh my-start.sh
#复制sh脚本
RUN chmod +x my-start.sh
#设置优先级
CMD ["sh","my-start.sh"]
#启动sh脚本

shell脚本

#!/bin/sh
#仅仅是一条简单的启动jar的命令,并且开启远程debug,端口为8888,我的spring boot项目占据的端口是8761
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888 app.jar

docker命令

docker build -t service:my .
docker run --name service -p 8762:8762 -p 8888:8888 -v /root/mySpringBoot/log:/log -d -it service:my
docker exec -it service /bin/sh
docker exec -it service /bin/bash

这样一个dockerfile的spring cloud项目就启动了。

一些小说明

dockerfile文件还可以写的更加好。我这种的话会导致docker build的时候层级过多,很影响build体验,或者docker from可以直接使用jdk8的centos镜像版本。可以节省更多的工作量。不过自从我对于dockerfile找到一点感觉之后,会更加倾向于自己控制所有的文件的构建,所有的环境的处理,这样会感觉更加在自己的掌握中。然后通过shell脚本,可以做更加多的控制。例如设置java的jvm参数等等操作,也很有意思。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值