前言:在容器化的时代,当然一切皆可容器化。在docker官网首页赫然有下面这几个大字。足以知道docker的优势。那么且问,mysql适合跑在docker中吗?

当然,这个问题有人说可以,也有人说不可以。下面我们就正反都来看下各自的观点。

1. 不可以容器化

大部分人的理由有2:

  • 其一,数据安全性不能保障

    在容器或者docker出现故障时,不易恢复。即使使用数据卷挂载(volume)也会在容器故障时产生数据问题,共享的数据卷且对宿主机也会有损伤。即数据的持久化和完整性不能保证。docker适合无状态的服务,不适合有数据状态的mysql。

  • 其二,影响mysql性能

    mysql我们常用来读写,那么IO性能就会受docker影响,最终瓶颈出现在写(在做了挂载情况下);且如果物理机其他应用占用过多资源,也会影响到容器。

当然,以上的问题,也都有对应的解决方案,但时也足够复杂;对研发力量不足的企业来说,如果盲目容器化的话,可能会捡了芝麻,丢了西瓜。

2. 可以容器化

有的小伙伴就会说了,同样是服务,业务服务都是跑在docker中的,数据库服务有何不可?

我只要配置下数据卷挂载,解决掉数据持久化问题,基本上就问题不大了。

比如:

docker run -p 3306:3306 --name mysql
-v /mydata/mysql/log:/var/log/mysql
-v /mydata/mysql/data:/var/lib/mysql
-v /mydata/mysql/conf:/etc/mysql
-e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

亦或是docker官方给的mysql容器化的配置sample(sample原文

services:
backend:
build: backend
ports:
- 8080:8080
secrets:
- db-password
db:
# We use a mariadb image which supports both amd64 & arm64 architecture
image: mariadb:10.6.4-focal
# If you really want to use MySQL, uncomment the following line
#image: mysql:8.0.27
restart: always
secrets:
- db-password
volumes:
- db-data:/var/lib/mysql
environment:
- MYSQL_DATABASE=example
- MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db-password
expose:
- 3306
- 33060
volumes:
db-data:
secrets:
db-password:
file: db/password.txt

两个例子都是通过-v把mysql相关目录数据做好挂载,那么在容器出现故障或者被删除时,能够保证相关数据在宿主机中存在。让数据恢复成为了可能性。注意!是可能性

当然还有docker天然的优势:

  • 简化部署,可移植性高
  • 保证环境一致性

这两个优势 就足以促使很多人去做容器化部署。(估计大家都被手动部署,迁移,多环境问题搞得头大过)

在我看来,两种观点或者是叫两种方案没有对错。也不应该有争论。而应该实事求是,根据当前的业务发展,研发力量来决策。

如果没有那个技术力量,就老老实实部署在物理机上,成本和风险更小。只是“万事开头难”而已。

如果有实力,有技术,那么需要设计出一个好的架构方案;比如需要考虑镜像管理,监控,容器灾备,存储扩展,k8s等

技术的潮流一定是容器化,serverless化。作为技术人们要拥抱变化,要去踏浪,否则只会被淹没在历史的浪潮里。

mysql到底需不需要容器化?的更多相关文章

  1. 容器化RDS|计算存储分离 or 本地存储?

    随着交流机会的增多(集中在金融行业,规模都在各自领域数一数二),发现大家对 Docker + Kubernetes 的接受程度超乎想象, 并极有兴趣将这套架构应用到 RDS 领域.数据库服务的需求可以 ...

  2. .NET Core+MySql+Nginx 容器化部署

    .NET Core容器化@Docker .NET Core容器化之多容器应用部署@Docker-Compose .NET Core+MySql+Nginx 容器化部署 GitHub-Demo:Dock ...

  3. Docker最全教程之MySQL容器化 (二十四)

    前言 MySQL是目前最流行的开源的关系型数据库,MySQL的容器化之前有朋友投稿并且写过此块,本篇仅从笔者角度进行总结和编写. 目录 镜像说明  运行MySQL容器镜像  1.运行MySQL容器  ...

  4. MySQL容器化详细教程

    前言:  上篇文章介绍了Docker工具的安装及常用命令使用.本篇文章我们会介绍如何在Docker中运行MySQL实例,可能有的小伙伴会问:为什么要在Docker里运行MySQL呢?因为在Docker ...

  5. zk,kafka,redis哨兵,mysql容器化

    1. zookeeper,kafka容器化 1.1 zookeeper+kafka单机docker模式 docker pull bitnami/zookeeper:3.6.3-debian-11-r4 ...

  6. 容器化安装Mysql 8.0 并部署主从复制

    系统: Centos 7.4 数据库版本:8.0.20 两台机器做相同操作 安装Docker export VERSION=18.06 && curl -fsSL http://rai ...

  7. Docker最全教程——MongoDB容器化(十二)

    MongoDB容器化 MongoDB是一个免费的.开源的.跨平台分布式面向文档存储的数据库,由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和 ...

  8. MySQL 到底能不能放到 Docker 里跑?

    https://weibo.com/ttarticle/p/show?id=2309404296528549285581 前言 前几月经常看到有 MySQL 到底能不能放到 Docker 里跑的各种讨 ...

  9. 一看就懂-Docker容器化

    一.Docker简介 1.1 什么是docker docker的英文意思是 码头工人,意思就是搬运东西的意思,其实这和docker的特点是一样的,docker提供的就是一种容器化搬运东西(我们的软件. ...

  10. aspnetcore 容器化部属到阿里云全过程记录

    第一次写博客,作为一个全栈er,记录一下从阿里云到产品运维上线的全过程 一.阿里云上的设置 购买阿里云ECS后: 进控制台查看实例公网IP 在控制台.网络与安全->安全组,配置规则 点击进去可以 ...

随机推荐

  1. 园子的商业化努力-AI人才服务:招募AI导师

    各位园子的小伙伴: 感谢大家对园子的支持,园子差不多接近20年的历程,一直是最低配模式生存和发展,感谢大家对于前段时间的困局给予了商业化的各种建议!在大家的鼓励与支持之下,园子的商业化努力正在以更快的 ...

  2. [ABC268C] Chinese Restaurant

    [ABC268C] Chinese Restaurant 声明:以上的所有操作都会再做一次\(%n+n)%n\),比如\(i - 1\)会变成\(((i-1)%n+n)%n\) 题意 有 \(n\) ...

  3. postman接口关联1

    1.接口关联 在接口测试中,经常会遇到后一接口的请求数据需要用到前一接口响应数据 关联接口:简单描述就是一个接口的返回结果作为另一个接口入参,其中最典型的就是需要登录token验证的接口,需要先调用登 ...

  4. Doris(五) -- 数据的导入导出

    数据导入 使用 Insert 方式同步数据 用户可以通过 MySQL 协议,使用 INSERT 语句进行数据导入 INSERT 语句的使用方式和 MySQL 等数据库中 INSERT 语句的使用方式类 ...

  5. 生物信息培训之WGCNA-权重基因共表达网络分析

    本文分享自微信公众号 - 生信科技爱好者(bioitee).如有侵权,请联系 support@oschina.cn 删除.本文参与"OSC源创计划",欢迎正在阅读的你也加入,一起分 ...

  6. RSA 加密解密

    from Crypto.Util.number import bytes_to_long, long_to_bytes, getPrime import libnum # 一.取两个素数 p = ge ...

  7. BGP选路

    实验拓扑 实验需求 现有三个自治系统,需要对R1访问R4的loopback-X数据走向进行精确控制: R1访问R4的loopback0走R2,通过在R1上修改本地优先级实现 R1访问R4的loopba ...

  8. STL-vector(ACM)

    1.长度可变的数组 2.这里不是很懂,v.size() 代码源里说这个v.size()是无符号类型的,使用时要说明类型, 但是我在使用时并没有出现warning,有大佬知道原因吗? 前置板子 3.ve ...

  9. JVM源码分析:深入剖析java.c文件中JavaMain方法中InitializeJVM的实现

    经过前文<从JDK源码级深入剖析main方法的运行机制>的分析,我们知道了实现JavaMain方法的四个主要步骤: 初始化Java虚拟机 加载主运行类 通过加载的主运行类,获取main方法 ...

  10. CF1817E Half-sum 另解与 Trygub Number

    一题水两篇怎么说. 上一篇中我们采用智慧方法减少了比较次数,避免了使用复杂的高精度数.现在我们有高论!可以做到 \(\mathrm O(\log_B V\log_2 n)\) 在某一位加或者减一个大小 ...