在使用 Docker 的时候,有没有可能完全不需要做持久化? 情况 1 ,如果只将 docker 看做一个虚拟机用,一直只启动一个 container ,这种情况是肯定不需要做持久化的。(虽然这种方式失去了使用 docker 的意义所在) 情况 2 ,如果每次 run docker 的时候,都使用-d 选项,让每个 container 一直存在,每次新请求都从这个已有的 container 中去解析,那么也不需要做持久化。 情况 3 ,假设我用“复制”的同步方式,搭建一个 Mysql 的集群,每个集群的节点都跑在 docker 上,那么当一个节点挂了之后,重启后其他节点的内容会复制过来,那么即使这个容器没有做持久化,也不影响业务。
当然 best practice 中已经写明要通过 volume 或 commit 方式做持久化。但是在思考这些问题的时候,确实上面的几个想法也说的通,所以请大家帮忙分析一下,或者举出一些实际中经常遇到的情况,来反驳上面的几条假设。
先谢谢各位了
1
lightening 2016-10-08 23:31:48 +08:00
主进程挂了 container 就没了
|
2
binux 2016-10-08 23:35:08 +08:00
你的假设都是没有持久化需求,那当然不要持久化了。
|
3
imxieke 2016-10-08 23:35:41 +08:00
关注一波:, 不过第 1 个有没有考虑宕机问题?或者容器内部出错需要重启的问题?
|
5
crysislinux 2016-10-09 01:01:02 +08:00
@rpre 要保存数据就是持久化,包括数据库,文件
|
6
crysislinux 2016-10-09 01:03:56 +08:00
没注意你提到了 MySQL 。。
|
7
ldbC5uTBj11yaeh5 2016-10-09 01:14:15 +08:00 via Android
docker 💊,他家路子最近歪得厉害。
网络和存储一直是它家老大难问题,现在根本没花力气解决这些,最终只会沦落大部分时候只作为为程序员的开发和运维工具存在。 |
8
yeasy 2016-10-09 08:09:32 +08:00
一个是持久化,一个是性能~
|
9
xiqingongzi 2016-10-09 08:17:41 +08:00 via Android
不做持久化很简单啊,容器只处理业务逻辑,数据都放在外面。
|
10
Citrus 2016-10-09 08:22:54 +08:00 via iPhone
数据库不做持久化?心这么大?你能保证某天你的所有容器不会先后挂掉来不及复制么?如果你认为你的数据丢了也无所谓,那当我没说。。。丢了无所谓的数据本身就不需要持久化。
|
11
denghongcai 2016-10-09 10:09:20 +08:00
MySQL 不持久化,机房断电了呢?异地容灾光纤断了呢?要往最坏的方向去想
|
12
killerv 2016-10-09 10:52:40 +08:00
MySQL 容器不需要做持久化处理吧,把 MySQL 的数据存储到容器外面
|
13
wizardoz 2016-10-09 12:42:49 +08:00
我用的不多,但是我遇到有数据的容器都是额外挂载数据目录进去.
因为我不知道要怎么处理数据放在容器里导致容器越来越大的情况. |
14
guyskk 2016-10-09 16:13:13 +08:00 via Android
复制并不能避免人为操作的错误。例如管理员突然删除了产品数据,或者部署了错误版本的代码导致搞乱了部分或者全部数据。所以必须要有一个能够让我们从这种场景中恢复数据的备份。
--- Python web 开发, p181 刚看书看到这段,大概是这个原因 |
15
mritd 2016-10-09 17:41:11 +08:00
有些没看太懂,不过我想说的是确实很多东西需要持久化,比如程序日志,这些日志量很大,而且我们还配合了日志追踪 zipkin ,包括 ELK 分析等等;还有比如你 docker 里跑得是一个 图片上传的 模块,那么这些图片文件肯定要持久化啊
|