背景
- 紧急需求,客户需要立马上线
- docker 包体积过大,远程不稳定,文件发不过去
- 单点修改,风险低
步骤
1. 获取 pod 所在宿主机 podonhost
| kubectl -n $namespance get pods -owide | grep $podname | grep Running |
2. 获取 pod 的容器 cid
| kubectl -n $namespance describe po $podname | grep "Container ID" |
3. 进入pod 所在宿主机 podonhost 修改容器内容
将本地打包提取出 class,copy 到服务器容器内
| docker cp xxx.class $cid_short:/ |
| docker exec -it $cid_short bash |
4. 进入到 jar 所在目录重新替换 jar 包
| |
| jar -xvf xxx.jar |
| |
| cp /xxx.class BOOT_INF/class/ |
| |
| jar -cfM0 xxx.jar ./ |
| |
| exit |
5. 重新打镜像
| docker commit $cid_short $image_path |
6. 镜像打包
7. 更新镜像
| |
| kubectl -n $namespance set image deployment/$deployment_name $deployment_name= $image_path |
结论
运行正常,修改生效,后续并整理了shell脚本,简化了操作
注意事项
- 这种方式打包出来的 docker 镜像包含运行时文件,不纯净
- 步骤4中 jar -cfM0 末尾的0不能省,否则会压缩导致无法加载
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示