【docker应用】从Docker(k8s)镜像或者容器里提取jar包

news/2024/11/14 5:12:21/文章来源:https://www.cnblogs.com/o-O-oO/p/18538791

引言

在docker或者k8s上运行了第三方的应用,很多时候我们都想知道运行流程,一般都会docker或者k8s容器中获取jar包。

那么该如何把里面的jar包提取出来呢?

其实有两种方式,分别为:

从镜像信息获取
进入容器获取

从镜像信息获取

首先,查看镜像:

docker image ls |grep <你想要找到镜像名>

查看镜像内容:

docker inspect <镜像ID>

内容大概如下:

[{"Id": "sha256:24cc0d9dcf54471b1bb2b63610ffaead977409b784c0fdeab7712d86b3b77663","RepoTags": ["xuxueli/xxl-job-admin:2.3.0"],"RepoDigests": ["xuxueli/xxl-job-admin@sha256:3dc5f442c64b44c97e5b5278df259bc29a8c6b130bee903b6a004d6d00302766"],"Parent": "","Comment": "","Created": "2021-02-09T08:56:42.0962399Z","Container": "4f8f019e52e19221958105a1c5788bfdcb0decc85dd5106fd083abf190a0006c","ContainerConfig": {"Hostname": "4f8f019e52e1","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/openjdk-8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","LANG=C.UTF-8","JAVA_HOME=/usr/local/openjdk-8","JAVA_VERSION=8u265","PARAMS=","TZ=PRC"],"Cmd": ["/bin/sh","-c","#(nop) ","ENTRYPOINT [\"sh\" \"-c\" \"java -jar $JAVA_OPTS /app.jar $PARAMS\"]"],"Image": "sha256:a2946f81fc1e7ec6b9385a14623e3217be1034d5313f933d7ac0d6868d67edac","Volumes": null,"WorkingDir": "","Entrypoint": ["sh","-c","java -jar $JAVA_OPTS /app.jar $PARAMS"],"OnBuild": null,"Labels": {}},"DockerVersion": "19.03.12","Author": "xuxueli","Config": {"Hostname": "","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/openjdk-8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","LANG=C.UTF-8","JAVA_HOME=/usr/local/openjdk-8","JAVA_VERSION=8u265","PARAMS=","TZ=PRC"],"Cmd": null,"Image": "sha256:a2946f81fc1e7ec6b9385a14623e3217be1034d5313f933d7ac0d6868d67edac","Volumes": null,"WorkingDir": "","Entrypoint": ["sh","-c","java -jar $JAVA_OPTS /app.jar $PARAMS"],"OnBuild": null,"Labels": null},"Architecture": "amd64","Os": "linux","Size": 223053204,"VirtualSize": 223053204,"GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/370de9d34af94c06305c6d77b2b18c9e6f9a65ef0a081722311b5d2d4dae03bb/diff:/var/lib/docker/overlay2/c7628695c23a5be652d30f9bd54808ef7e3ae33b1a2d44845213f37a8de8f45a/diff:/var/lib/docker/overlay2/5855b68925bb36ab1672a12942e89b2f7b13054bcf3f630dff6680ba0bb7b7a4/diff:/var/lib/docker/overlay2/6f35414475cdb5959cecfa1bb5ac7555b126b1b0e1750d29ed701b33ed77b09b/diff:/var/lib/docker/overlay2/86344e5893741d6757a7be24dfd8a3502af0c130cae2e05f46e405e70285a3bd/diff","MergedDir": "/var/lib/docker/overlay2/4857c5be1f7f9f2a293ae474a7af157e5d5a2ff5b37c8d3232ea4773fe87fc04/merged","UpperDir": "/var/lib/docker/overlay2/4857c5be1f7f9f2a293ae474a7af157e5d5a2ff5b37c8d3232ea4773fe87fc04/diff","WorkDir": "/var/lib/docker/overlay2/4857c5be1f7f9f2a293ae474a7af157e5d5a2ff5b37c8d3232ea4773fe87fc04/work"},"Name": "overlay2"},"RootFS": {"Type": "layers","Layers": ["sha256:d0f104dc0a1f9c744b65b23b3fd4d4d3236b4656e67f776fe13f8ad8423b955c","sha256:95c20fa5728d237b86ad3a7f2997e3ad71ec472165297872c119108de68e7114","sha256:ed7152ed4cbd0de85948780e8b33ffe66728f56b864bb8db4b520089b48c4883","sha256:43ee8102614ddbd62242c06c4a2f7dc50fd81a9dbd72daf75467c65264d95d4f","sha256:c39ce324e48b7719700a03f89eb594479ef4f4f5bce554b249346b9ecf72f3fd","sha256:13562a79b4ca55a6dd7b3c2eb8cc58f28009156971ca07348d0f4cc52941d2ea"]},"Metadata": {"LastTagTime": "0001-01-01T00:00:00Z"}}
]

从内容中,可以看到打包镜像的流程,其中CMD的标签和环境变量,可以看出使用java来执行程序,依赖库及执行程序入口如下:

一般jar包在UpperDir:

进入对应的路径:

cd /var/lib/docker/overlay2/4857c5be1f7f9f2a293ae474a7af157e5d5a2ff5b37c8d3232ea4773fe87fc04/diff

可以看到里面有对应的文件和jar包,如果还没有,只能进入容器查看了。

进入容器获取(推荐)

进入k8s容器命令:

kubectl exec -it pod名称 -n命名空间 bash

进入docker容器命令:

docker exec -it container名称 /bin/sh

看看里面有什么内容:

将容器中的jar包复制到本地目录:

可以看到此目录已经含有所有程序运行时需要的内容了。

参考🔗

https://mp.weixin.qq.com/s/S0hshZhCL-lEn9CVDAhHPA

原创 架构与源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/830906.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

充电桩普遍选用芯海CSE7761集成3路ADC的免校准单相计量芯片

CSE7761是一款单相多功能电能计量芯片,工作于 3.579MHz 时钟频率,其内部集成了 3 路 sigmadelta ADC、功率计算器、能量-频率转换器、一路 SPI 接口、一路 UART 接口。适用于充电桩、单相多功能电能表、智能插座、智能家电等应用.CSE7761 设计用于精确计算电压有效值、电流有…

喝个水也要整智能家居?

ChatGPT对文章的摘要 这篇博客讲述了作者在家庭日常用水管理方面的改进经历。由于家里用水量增多,作者不断优化解决方案,从最初用农夫山泉桶装水,到购买反渗透净水机,再到通过智能化手段 简化补水流程。过程中,作者不断提高设备自动化程度,最终实现了全自动化补水,并且详…

基于FPGA的256QAM基带通信系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR

1.算法仿真效果 vivado2019.2仿真结果如下(完整代码运行后无水印):设置SNR=40db:将数据导入matlab,显示其星座图:设置SNR=32db:将数据导入matlab,显示其星座图:设置SNR=24db:将数据导入matlab,显示其星座图:系统RTL结构如下:仿真操作步骤可参考程序配套的操作视频…

产业园区,被逼急了

这几年传统的地产开发业务遇到了各种各样的困境,许多房企转而开始积极布局多元化业务,业内的“去地产化”运动也愈演愈烈。 在这个时代背景下,产业园开发运营赛道迎来了一波热度爆发,吸引着众多房企和其他多元化主体的参与。那么,在日益升高的关注度与参与度之下,产业地产…

寂寂冬夜

引言 没错,本文的标题是嘉然学姐最喜欢的动漫《白色相簿2》中的插曲。 今天,chino 的 XCPC 最后一站——杭州站也结束了。(又浪费一年) 于是姑且乱写一番,也算是留下自己虚度光阴的罪证。 第一站 CCPC 哈尔滨 第一站是 CCPC 哈尔滨站,周六中午和 CD, BE, Sakura, Chen_jr 吃…

2024年11月10日重装系统后安装的软件

激活 Win11 双击开始激活:点击开始:激活完成:IDEA 2024 资源来自考拉软件:https://www.rjctx.com/41804.html

基于game-based算法的动态频谱访问matlab仿真

1.算法运行效果图预览 (完整程序运行后无水印)展示了负载因子P和次级传输功率不同的HPE。从图中可以看出,随着|hP E|扩大,用户P更好的为二级用户分配更多的频谱机会,以便刺激二级用户传输更多的干扰功率,因此,导致ρ的减少和Psu的增加。不同方案下不同用户P信噪比下的保密率。…

智慧医疗领域帮助中心的构建与优化

大家晚上好,这里是ai元启航,今天这篇分享的文章涉及内容是智慧医疗~ 智慧医疗的快速发展对内部支持体系提出了更高要求。一个高效、易用的帮助中心,不仅能够提升医护人员的工作效率,还能促进医疗服务的标准化和智能化。本文将分析智慧医疗行业如何构建和优化帮助中心,以提…

黑马PM- B端产品-报表设计

报表设计思路采购及销售报表财务报表

金融行业内部知识库的搭建与管理

大家好这篇分享的是有关金融行业 在金融行业,内部知识库的搭建与管理对于提升服务质量、确保合规性及促进团队协作至关重要。一个高效的知识库能够加速问题解决,减少重复劳动,提升整体运营效率。本文将探讨金融行业如何构建和优化内部知识库。 一、明确知识分类,建立结构框…