docker - 更好的 docker 镜像方法
问题描述
我是 docker 新手,所以我想知道使用它的更好方法是什么。我有一个需要三个组件才能工作的项目:
Jboss 服务器应用程序
PostgreSQL
一个弹簧启动应用程序
因此,基于此,我的问题是:
1) 我应该为上面提到的每个组件都有一个 docker 映像吗?如果是,为什么不把所有东西放在一起呢?我对 docker 的想法是简化应用程序的部署,因此将所有这些放在一起可以很容易地在另一个环境中安装这个应用程序,对吧?
2)如果是(每个组件一个docker镜像),spring boot只是一个“Java -jar”命令,真的需要一个docker镜像吗?
3) 如果是 PostgreSQL,我应该拥有包含所有数据库结构和数据的图像,还是只拥有没有任何东西的普通 PostgreSQL?
解决方案
回答您的问题
1) 我应该为上面提到的每个组件都有一个 docker 映像吗?如果是,为什么不把所有东西放在一起呢?我对 docker 的想法是简化应用程序的部署,因此将所有这些放在一起可以很容易地在另一个环境中安装这个应用程序,对吧?
最好将它们放在单独的组件上,以便:
- 您可以隔离案例(将帮助您进行调试)
- 在 k8s 或 docker-swarm 上运行时,您可以选择性地(水平)扩展特定的无状态组件
- 您可以为每个组件设置硬件限制(RAM、CPU 等)
- 您有不同的基础图像(可能对优化有用)
- 您想独立构建和测试您的组件
名单还在继续
2)如果是(每个组件一个 docker 映像),spring boot 只是一个“Java -jar”命令,真的需要一个 docker 映像吗?
如果它适合您的用例,请检查上面提到的列表(为什么最好分开) 。请注意,将其添加到现有组件会影响您的扩展策略
示例 - 您使用 spring boot app 运行 3 个 jboss 组件实例,您将为它们生成 3 个实例 w/c 您可能不想要。
3)在 PostgreSQL 的情况下,我应该拥有包含所有数据库结构和数据的图像,还是只是没有任何东西的 vanilla PostgreSQL?
我建议您将结构和数据挂载到主机卷,以便在重新启动映像时不会丢失。看例子所以我会推荐使用香草postgres
我希望这对你有所帮助
推荐阅读
- javascript - 如何在nodejs中列出路径文件名
- bluetooth-lowenergy - 如何修改 BLE gatt 服务器配置文件
- firebase - Firebase - 上传 APNs 身份验证密钥时出现错误“没有为此应用存储团队 ID”
- javascript - react-redux:动作不会改变商店
- azure - GitHub、Git-LFS 和 Azure
- vue.js - Vue 3:将 id 属性与变量绑定,带有部分自定义文本
- command - 我的 nuke 命令按预期工作 discord.js
- python - 类和函数之间的变量处理
- java - 当前运行的应用程序及其输出控制台的 Eclipse 视图
- database - 数据库浏览器 SQLITE3