Docker 不适合部署数据库的七大原因
1.数据安全问题
不要将数据存储在容器中,这是Docker官方容器使用技巧中的一条。容器可以随时关闭、删除或停止,因此当容器被rm掉,里面的数据将会丢失。为了避免数据丢失,用户可使用数据卷挂载来存储数据。但是容器的Volumes设计围绕Union FS镜像层提供持久存储,数据安全缺乏保证。而且容器里共享数据卷组,对物理机硬件损伤较大。总之,如果容器崩溃,数据库未正常关闭,则可能会损伤数据。
2.性能问题
像关系型数据库MySQL,它对于IO要求比较高。当一台物理机跑多个数据库时,IO就会累加,导致IO瓶颈,大大降低MySQL的读写性能。如果部署在Docker上,那么IO请求又会出现在存储层面。
针对以上问题的解决方案:
1)数据库程序与数据分离---将程序放到容器,将数据放到共享存储。另外,建议不要将数据放到宿主机里。
2)Doker里面部署轻量级或者分布式数据库
3)合理布局应用---对IO要求高的应用或服务,将数据库部署在物理机或者KVM中。像腾讯云的TDSQL(金融分布式数据库)和阿里云的Oceanbase(分布式数据库系统)就是直接部署在物理机上的。
3.网络问题
Docker存在网络问题,而数据库需要专用的和持久的吞吐量,以实现更高负载,而解决Doker网路问题需要对网络虚拟化有着深入了解,这些问题放在一起,因此容器化会让数据库容器更加困难,所以建议将数据库放在专用环境中。
4.状态
Docker中,水平伸缩只能是用于无状态计算服务,而数据库是具有数据状态的,因此&#