ICE.ICE|

韩憨

园龄:4年7个月粉丝:42关注:47

Java的jar包构建成docker镜像并运行

结构如下

 

把jar和Dockerfile放到一个文件,不在一个文件下会报错文件找不到

创建一个构建文件

buildimage.sh

vi /home/hanby/buildimage.sh

echo "运行创建镜像脚本"
docker build -t gateway:2.4.3 .

 

Dockerfile创建镜像

vi /home/hanby/Dockerfile

# 版本信息
#java:latest 为centos官方java运行环境镜像,600多M ,可以提前pull到主机本地
FROM java:latest

#MAINTAINER "指定作者或其他信息"

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

RUN mkdir -p /jeecg-cloud-gateway

WORKDIR /jeecg-cloud-gateway

#实际上可以配置成变量
ADD jeecg-cloud-gateway-2.4.3.jar /usr/local/jar/

RUN mv /usr/local/jar/jeecg-cloud-gateway-2.4.3.jar /usr/local/jar/gateway.jar

#开启内部服务端口 cicd-demo 项目端口
EXPOSE 9999

CMD ["java","-jar","/usr/local/jar/gateway.jar"]

 

run.sh 创建

vi /home/hanby/run.sh

echo "移除原本gateway镜像"
docker rm -f gateway
echo "运行新的gateway镜像,端口为9999"
#docker run --name="gateway" -p 9999:9999 -d gateway:2.4.3
docker run -d --restart=always --name gateway -v /home/jenkins-jar/buildgatewayImage/logs/:/logs/gateway/ -p 9999:9999 gateway:2.4.3

 

执行 ./buildgatewayImage.sh

  ./run-gateway-9999.sh

 

运行结果

 

出现的问题解决方法

 如果用127.0.0.1访问docke启动的mysql,会报错,应该使用宿主机ip,或者在启动命令中添加--net=host,使容器和宿主机ip一致

 如果出现宿主机和容器时间一致,但日志时间相差8小时,则在启动命令中添加如下:

        -v /etc/timezone:/etc/timezone:ro \
        -v /etc/localtime:/etc/localtime:ro \

    用链接让容器使用系统时区

如果是springboot项目,也可以在启动类添加

  TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai")); 

 

 

 然而jar的大小总的来说还是很大,所有使用瘦身打包,可以把每个jar分离为依赖组件lib目录和一个业务jar来进行部署,优化单个jar文件大小到一两百KB。

  

 但是对于很多个微服务,每个服务一个jar和一个lib目录文件,首次部署也差不多需要传输一两个GB文件。

    所以合并所有模块依赖jar到同一个lib目录,一般由于各模块项目依赖jar重叠程度很高,合并所有服务部署文件总计大小基本也就两三百MB

    启动过程不再需要 -Djava.ext.dirs=lib 参数定义,所有微服务jar引用所有项目合并依赖组件的公共目录,部署文件总计大小一般在两三百MB,通过定制每个微服务jar文件中的META-INFO/MANIFEST文件中的Class-Path明确指明依赖版本组件类,解决各微服务不同组件版本冲突问题。

  

   微服务配置,可以给父pom配置,如果其中有不需要瘦身打包的,则需要单独配置每一个需要瘦身打包的服务,也可以排除不需要瘦身打包,怎样方便怎样来

   父pom配置

<build>
<finalName>${project.artifactId}</finalName>
<!--
特别注意:
项目仅仅是为了演示配置方便,直接在parent的build部分做了插件配置和运行定义。
但是实际项目中需要把这些定义只放到spring boot模块项目(可优化使用pluginManagement形式),避免干扰其他util、common等模块项目
-->
<plugins>
<!-- 基于maven-jar-plugin插件实现把依赖jar定义写入输出jar的META-INFO/MANIFEST文件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<useUniqueVersions>false</useUniqueVersions>
</manifest>
</archive>
</configuration>
</plugin>
<!-- 拷贝项目所有依赖jar文件到构建lib目录下 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!--
各子模块按照实际层级定义各模块对应的属性值,检查所有微服务模块依赖jar文件合并复制到同一个目录
详见各子模块中 boot-jar-output 属性定义
-->
<outputDirectory>${boot-jar-output}/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>false</stripVersion>
<silent>false</silent>
</configuration>
</execution>
</executions>
</plugin>
<!-- Spring Boot模块jar构建 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includes>
<!-- 不存在的include引用,相当于排除所有maven依赖jar,没有任何三方jar文件打入输出jar -->
<include>
<groupId>null</groupId>
<artifactId>null</artifactId>
</include>
</includes>
<layout>ZIP</layout>
<!--
基于maven-jar-plugin输出微服务jar文件进行二次spring boot重新打包文件的输出目录
所有微服务构建输出jar文件统一输出到与lib同一个目录,便于共同引用同一个lib目录
详见各子模块中boot-jar-output属性定义
-->
<outputDirectory>${boot-jar-output}</outputDirectory>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!--###################瘦身打包######################################-->

子pom配置

<!--###########瘦身打包###########文件路径自己定义即可-->
<properties>
<java.version>8</java.version>
<boot-jar-output>../toImageJar</boot-jar-output>
</properties>

 

   打包结果如下

 

        

 

docker 配置

Dockerfile 修改

 

# 版本信息
#java:latest 为centos官方java运行环境镜像,600多M ,可以提前pull到主机本地
FROM java:latest

#MAINTAINER "指定作者或其他信息"

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#RUN mkdir -p /jeecg-cloud-pay

#在jar文件目录下创建一个lib

RUN mkdir -p /usr/local/jar/lib

#WORKDIR /jeecg-cloud-pay

#实际上可以配置成变量
ADD jeecg-cloud-flh-pay.jar /usr/local/jar/

#COPY lib /usr/local/jar/lib

RUN mv /usr/local/jar/jeecg-cloud-flh-pay.jar /usr/local/jar/pay.jar

#开启内部服务端口 pay项目端口
EXPOSE 7006

CMD ["java","-Xms1024m","-Xmx1024m","-jar","/usr/local/jar/pay.jar"]

 

run-pay-7006.sh 配置

echo "移除原本pay镜像"
docker rm -f pay
echo "运行新的pay镜像"
docker run -d --restart=always --name pay \
--net=host \
-v /etc/timezone:/etc/timezone:ro \
-v /etc/localtime:/etc/localtime:ro \
-v /data/soft/imageAPP/logs/pay/:/logs/pay/ \
-v /data/soft/imageAPP/lib:/usr/local/jar/lib \      映射目录,如此就只需要一个lib即可,也可以copy  lib到容器(麻烦,必须在每个容器里面复制一份)
-p 7006:7006 pay:2.4.3

 

其他打包方式参考 https://mp.weixin.qq.com/s/hstk9tXzKt-Up20kD5x0fg

本文作者:韩憨

本文链接:https://www.cnblogs.com/hanby/p/15293614.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   韩憨  阅读(1495)  评论(0编辑  收藏  举报
//看板娘

剑桥

评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 隔离 (Studio Live Duet) 陈凯咏,林家谦
  2. 2 明知做戏 吴雨霏
  3. 3 残酷游戏 卫兰
  4. 4 你,好不好? 周兴哲
  5. 5 我可以 蔡旻佑
  6. 6 云烟成雨 房东的猫
  7. 7 说散就散 JC 陈咏桐
  8. 8 我配不上你 夏天Alex
  9. 9 不再联系 夏天Alex
  10. 10 等我先说 夏天Alex
  11. 11 我知道他爱你 夏天Alex
  12. 12 多想在平庸的生活拥抱你 隔壁老樊
  13. 13 这一生关于你的风景 隔壁老樊
  14. 14 我曾 隔壁老樊
  15. 15 关于孤独我想说的话 隔壁老樊
  16. 16 过客 周思涵
  17. 17 备爱 周思涵
  18. 18 嚣张 en
  19. 19 海口 后弦
明知做戏 - 吴雨霏
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : Xia Zhi

作曲 : Fong Man Leung

编曲 : 吴国恩

监制 : Gary Chan

等你的汽水喝一半给你加片薄冰

等你的桌面满泻我总会打理重整

不想纯情 不够聪明

你未发现我的身影

得我帮你依照编码整理家里电影

得我帮你依照编码整理家里电影

只会得我一个帮你选购喜爱铃声

天天如常 估你心情

等一个眼神求证 一闪擦过如流星

怎么我为我做过的感到惊怕

就像爱吗我也不肯定恐怕

我以为存在吗 千变万化

从来不肯开口可相信吗 离谱吗

请你不要阻我喜欢你

明明是爱但你未说话你扮作闪避

这个沉默冷静的你毫无办法处理

其实我亦怕是错摸心理

总有天会等到好天气

游行示爱大叫着你在某大片草地

等你无用退避不过仍然害羞的你

还是顾忌太不争气 明知做戏

即使你未太在意不感到惊讶

即使你未太在意不感到惊讶

现在要说爱你请准备招架

勇气还存在吗 不要害怕

随时真的胆敢亲手送花 离谱吗

请你不要阻我喜欢你

明明是爱但你未说话你扮作闪避

这个沉默冷静的你亳无办法处理

其实我亦怕是错摸心理

总有天会等到好天气

游行示爱大叫着你在某大片草地

等你无用退避不过仍然害羞的你

还是顾忌太不争气 明知做戏

不过不要阻我紧张你

如何令你愉快让我办妥为你准备

喜爱沉默冷静的你还是自信的你

仍愿意为你造一些惊喜

总有天会等到好天气

游行示爱大叫着你在某大片草地

等你无用退避不过途人目光不理

期待贴着你的手臂 无须做戏

等你喜爱等你不爱就凭摘毫验证

等你喜爱等你不爱就凭摘毫验证

想爱不爱偏爱不理亦同样难划清

天天如常 估你心情

不想扑索来求证 争取过趁还年青

终于你下决定来答应 太动听

点击右上角即可分享
微信分享提示