数据库不适合docker及容器化的几大原因:
1、数据不安全
即使你要把 Docker 数据放在主机来存储 ,它依然不能保证不丢数据。 Docker volumes 的设计围绕 Union FS 镜像层提供持久存储,但它仍然缺乏保证。
使用当前的存储驱动程序,Docker 仍然存在不可靠的风险。 如果容器崩溃并数据库未正确关闭,则可能会损坏数据。
2、运行数据库的环境需求
常看到 DBMS 容器和其他服务运行在同一主机上。 然而这些服务对硬件要求是非常不同的。
数据库(特别是关系型数据库)对 IO 的要求较高。 一般数据库引擎为了避免并发资源竞争而使用专用环境。如果将你的数据库放在容器中,那么将浪费你的项目的资源。 因为你需要为该实例配置大量额外的资源。 在公有云,当你需要 34G 内存时,你启动的实例却必须开 64G 内存。在实践中,这些资源并未完全使用。
怎么解决? 您可以分层设计,并使用固定资源来启动不同层次的多个实例。 水平伸缩总是比垂直伸缩更好。
3、网络问题
要理解 Docker 网络,您必须对网络虚拟化有深入的了解。也必须准备应付好意外情况。你可能需要在没有支持或没有额外工具的情况下,进行 bug 修复。
4、状态
在 Docker 中打包无状态服务是很酷的,可以实现编排容器并解决单点故障问题。 但是数据库呢? 将数据库放在同一个环境中,它将会是有状态的,并使系统故障的范围更大。下次您的应用程序实例或应用程序崩溃,可能会影响数据库。
5、额外的隔离对数据库是不利的
其实我在第二点和第三点原因中提到了这一点。 但我把这个列为单独的原因,因为我想再次强调这一事实。 我们拥有的隔离级别越多,我们获得的资源开销就越多。 相比专用环境而言,容易水平伸缩可以使我们得到更多的好处。 然而在 Docker 中水平伸缩只能用于无状态计算服务,而不是数据库。
我们没有看到任何针对数据库的隔离功能,那为什么我们应该把它放在容器中?
推荐教程:docker教程
以上就是数据库不适合docker及容器化的原因的详细内容,更多请关注php中文网其它相关文章!