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