随笔 - 204  文章 - 0  评论 - 15  阅读 - 32万

基于Docker部署应用最佳实践

1. 最近修复测试bug的同时,发现之前docker部署中镜像构建和docker run命令有挺多不合理的设置

(1)首先是镜像构建,直接用了jdk镜像,再通过docker run运行command命令

这种方式运行好处在于不用构建各个应用镜像,但带来的坏处就是需要在command处做文章满足应用运行时各种配置,而且这种方式同开发时运行程序多多少少有出入,带来排查问题的困扰。

(2)运行时当前路径问题

以上基于jdk镜像直接运行command,需要考虑到容器当前WORKDIR为根目录/,而应用相关的都部署在/app路径下,如果增加了一些资源文件而且程序中引用方式为相对路径,就很容易出现问题。

比如如下,我增加了sidebar.yml文件,程序中使用相对路径获取该文件config/sidebar.yml,开发环境中木有问题,部署测试后出现FileNotFound异常。

究其原因,以上容器运行方式,command是在根路径/下执行,程序会加载/config/sidebar.yml而非真正的/app/config/sidebar.yml。

将command修改为 sh -c "cd /app && java -jar app.jar --spring.profiles.active=archive"解决问题。

经过以上实践,为减少约定减少配置,应当为每个应用构建镜像,将类似以上工作路径,command固化在镜像内(如下),保持同开发环境一致。在docker run时将可能的变化项映射出来。

 

posted on   -赶鸭子上架-  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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