专栏首页喵叔's 专栏数据库部署在Docker中,Are You Crazy ?

抱歉,你查看的文章已删除

数据库部署在Docker中,Are You Crazy ?

最近在兼职做 IT 咨询期间遇到过许许多多问题,其中咨询较多的问题之一就是在 Docker 容器中部署数据库。每每接到这个咨询我就想说一句:Are you crazy? Docker 在这几年可以说是大火,几乎所有的公司都将网站或者应用系统部署在 Docker 中,更有甚者将数据库也部署在 Docker 中(这个内容占到 Docker 问题咨询的一半左右)。那么将数据库部署在 Docker 中真的好吗?虽然像 MySQL、MSSQL、Oracle 等知名数据库都有 Docker 镜像,但是就目前 Docker 的情况来看将数据库容器化是不合理的,主要原因有如下6个方面:

  1. 数据安全
  2. 网络问题
  3. 资源隔离
  4. 云平台适用问题
  5. 运行环境
  6. 状态问题

下面分别对这七6方面进行一一讲解。

一、数据安全

Docker 官方明确说明过不要将数据存储在容器中,因为容器可以随时被删除,这样存储在容器中的数据也就随之丢失,因此官方推荐使用挂载 Volumes 的形式来存储数据,但是 Volumes 是由 Union FS 镜像层提供数据持久存储的,了解这个镜像层的开发人员都知道它很难保证数据安全,如果容器意外挂掉那么数据就很有可能损坏。其次,如果频繁对容器的共享数据卷(组)读写操作也会对物理服务器的硬件造成损害,进而造成数据丢失。

二、网络问题

数据库一般都具有高负载,因此需要专用的网络和持续的吞吐。如果对 Docker 的网络和网络虚拟化没有深入的了解的话,做这一块将会非常的困难,即使做了出来也很难保证网络的稳定。

三、资源隔离

Docker 目前还无法完全实现资源隔离,它只利用 Cgroup 来实现资源限制,只能限制资源消耗的最大值。如果有其他应用系统大量占用物理服务器资源,那么将会影响到部署在容器中的数据库的执行效率。

四、云平台适用问题

目前主流的云平台都支持弹性扩展,如果像让我们的数据库服务器也可以弹性扩展的话,就必须适用非容器化环境。

五、运行环境

我在进行 IT 咨询的时候遇到过很多将数据库容器和其他服务容器部署在同一台服务器上的情况,我们都知道不同类型的服务所需的硬件要求是不同的,尤其是像数据库这种服务对 IO 的要求会比较高。正常情况下我们会将数据库单独部署在独立的服务器上,这样就要可以避免并发资源竞争,但是如果将数据库部署在容器中那么可想而知将会限制数据库对资源的利用进而引发数据库的性能问题。

六、状态问题

Docker 快速扩展的重要特征是无状态,可以实现编排容器解决单点故障,一般来说具有状态的数据都不适合放在容器中,但是数据库是有状态的,如果将其部署在容器中会就必须单独部署存储服务,那么如果数据库崩溃/出错造成的故障范围就会扩大,进而应用系统崩溃。

七、总结

上面六条总结了为什么 Docker 不适合部署数据库,当然这不是绝对的。如果你使用的是轻量级数据库或者分布式数据库的话其实是可以部署在 Docker 中的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据库部署在Docker中,Are You Crazy ?

    最近在兼职做 IT 咨询期间遇到过许许多多问题,其中咨询较多的问题之一就是在 Docker 容器中部署数据库。每每接到这个咨询我就想说一句:Are you cr...

    喵叔
  • Java学习笔记-spring-Bean作用于

    Bean的作用于是通过 元素的 scope 属性来制定的,以singleton为例,示例代码如下:

    喵叔
  • Docker 学习笔记-数据管理

    我们在使用 docker 的时候会将一些数据(例如网站文件、配置文件、数据库文件等)存储在容器中。这样存在一个严重的问题,如果容器出现损坏(例如无法启动,被删除...

    喵叔
  • 数据库部署在Docker中,Are You Crazy ?

    最近在兼职做 IT 咨询期间遇到过许许多多问题,其中咨询较多的问题之一就是在 Docker 容器中部署数据库。每每接到这个咨询我就想说一句:Are you cr...

    喵叔
  • 为什么不建议把数据库部署在docker容器内?

    近2年Docker非常的火热,各位开发者恨不得把所有的应用、软件都部署在Docker容器中,但是您确定也要把数据库也部署的容器中吗?

    xcbeyond
  • 为什么不建议把数据库部署在docker容器内?

    近2年Docker非常的火热,各位开发者恨不得把所有的应用、软件都部署在Docker容器中,但是您确定也要把数据库也部署的容器中吗?

    IT大咖说
  • Docker 容器真的安全吗?

    本文基于我今年在DockerCon上的演讲。它将讨论 Docker 容器安全性,我们当前的位置以及未来的发展方向。

    Hyman.W
  • 从“集装箱运输”了解容器技术

    容器技术的火爆和日益普及已经成为不争的事实,众多公有云平台纷纷支持Docker,AWS、Google、Azure、阿里云以及国内的各大公有云厂商都推出了容器云业...

    达观数据
  • docker:一种值得关注的开源应用容器

    昨天我们谈到了资源管理中资源隔离技术LXC,linux轻量级的隔离技术。今天介绍一个基于LXC技术发展的开源应用容器引擎:Docker。 什么是Docker: ...

    大数据和云计算技术
  • 「第一部:容器和Docker」(2) 什么是Docker

    Docker是一个开源项目,用于将应用程序作为可移植的、自给自足的容器自动部署,这些容器可以在云端或本地运行。Docker也是一家推广和发展这项技术的公司,与云...

    首席架构师智库

扫码关注云+社区

领取腾讯云代金券