数据库部署在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 中的。


目录
相关文章
|
16天前
|
存储 测试技术 Linux
【Docker项目实战】使用Docker部署bender个人仪表板
【4月更文挑战第2天】使用Docker部署bender个人仪表板
28 1
|
25天前
|
存储 机器学习/深度学习 中间件
快速上手 Elasticsearch:Docker Compose 部署详解
本文介绍了如何使用Docker Compose快速搭建Elasticsearch学习环境。Elasticsearch是一款用于实时搜索和分析的分布式中间件,适用于多种场景,如搜索、日志分析、机器学习等。首先,创建docker网络,拉取最新版8.12.2镜像。接着,编写docker-compose.yml文件,配置单节点集群,设置端口映射、内存限制及数据卷挂载。然后,创建并配置数据卷目录,允许远程访问和跨域。最后,启动服务并验证,通过浏览器访问确认服务运行正常。本文为初学者提供了一个简便的Elasticsearch部署方法。
141 4
快速上手 Elasticsearch:Docker Compose 部署详解
|
17天前
|
前端开发 应用服务中间件 nginx
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
78 0
|
1天前
|
测试技术 Linux 网络安全
【好玩的开源项目】使用Docker部署SyncTV视频同步和共享平台
【4月更文挑战第16天】使用Docker部署SyncTV视频同步和共享平台
30 0
|
6天前
|
测试技术 Linux 数据安全/隐私保护
【Docker项目实战】使用Docker部署Seatsurfing预订座位系统
【4月更文挑战第12天】使用Docker部署Seatsurfing预订座位系统
32 3
|
9天前
|
JavaScript 前端开发 Docker
全栈开发实战:结合Python、Vue和Docker进行部署
【4月更文挑战第10天】本文介绍了如何使用Python、Vue.js和Docker进行全栈开发和部署。Python搭配Flask创建后端API,Vue.js构建前端界面,Docker负责应用的容器化部署。通过编写Dockerfile,将Python应用构建成Docker镜像并运行,前端部分使用Vue CLI创建项目并与后端交互。最后,通过Nginx和另一个Dockerfile部署前端应用。这种组合提升了开发效率,保证了应用的可维护性和扩展性,适合不同规模的企业使用。
|
13天前
|
测试技术 Linux 数据安全/隐私保护
【Docker项目实战】使用Docker部署PicoShare共享文件平台
【4月更文挑战第5天】使用Docker部署PicoShare共享文件平台
46 4
|
17天前
|
测试技术 Linux Docker
Docker部署RPG网页小游戏
Docker部署RPG网页小游戏
44 2
|
20天前
|
Linux Shell 开发工具
CentOS8中Docker安装及部署
CentOS8中Docker安装及部署
67 0
|
20天前
|
关系型数据库 MySQL Nacos
【深入浅出Nacos原理及调优】「实战开发专题」采用Docker容器进行部署和搭建Nacos服务以及“坑点”
【深入浅出Nacos原理及调优】「实战开发专题」采用Docker容器进行部署和搭建Nacos服务以及“坑点”
45 1