Jac*_*cob 13 docker dockerfile
我正在尝试使用Docker,Kubernetes和Jenkins为我的项目实现CI / CD管道。我的应用程序是多租户应用程序,其中数据库应用程序变量对于不同的租户来说都是不同的。
应用策略
在构建Docker映像时,我正在使用Dockerfile。然后将Dockerfile保留在SVN代码存储库中。对于每个租户,代码存储库都是相同的。在构建映像时,那时我需要为不同的租户构建不同的映像。
Dockerfile实现
在我的docker文件中,我添加了如下入口点,
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=tenant1config" , "TestProject.war"]
Run Code Online (Sandbox Code Playgroud)
如果我需要为另一个租户构建Docker映像,则需要添加
-Dspring.profiles.active=tenant2config
因此,Dockerfile中的入口点是动态的。
我的困惑
我如何找到实现此问题的良好标准方法?
Moh*_*tha 13
应用程序的配置是部署之间可能会发生变化的所有内容(阶段,生产,开发人员环境等)。这包括:
数据库,Memcached和其他支持服务的资源句柄
外部服务(例如Amazon S3或Twitter)的凭证
每次部署的值,例如部署的规范主机名
你应该不为每个租户建立独立的泊坞窗图像作为二进制应该是相同的,任何运行时配置应通过环境注入。
注入运行时配置有不同的选项
代替在入口点对配置文件进行硬编码,添加环境变量
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=$TENANT_PROFILE" , "TestProject.war"]
然后从kubernetes部署配置中注入环境变量,请参阅https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/
您的入口点看起来像
ENTRYPOINT ["java", "-jar", --spring.config.location="file:/path/to/tenantconfig.yaml" , "TestProject.war"]
然后将所需的配置文件挂载为kubernetes配置。
两种方式都可以从docker映像外部化运行时配置,然后通过部署配置将其作为环境变量或配置注入。
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |