基于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 2023-04-14 17:36  -赶鸭子上架-  阅读(48)  评论(0编辑  收藏  举报