背景
- 紧急需求,客户需要立马上线
- 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,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步