V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rpre
V2EX  ›  程序员

Docker 为何要做持久化( persistance)?

  •  
  •   rpre · 2016-10-08 23:14:58 +08:00 · 5923 次点击
    这是一个创建于 2954 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在使用 Docker 的时候,有没有可能完全不需要做持久化? 情况 1 ,如果只将 docker 看做一个虚拟机用,一直只启动一个 container ,这种情况是肯定不需要做持久化的。(虽然这种方式失去了使用 docker 的意义所在) 情况 2 ,如果每次 run docker 的时候,都使用-d 选项,让每个 container 一直存在,每次新请求都从这个已有的 container 中去解析,那么也不需要做持久化。 情况 3 ,假设我用“复制”的同步方式,搭建一个 Mysql 的集群,每个集群的节点都跑在 docker 上,那么当一个节点挂了之后,重启后其他节点的内容会复制过来,那么即使这个容器没有做持久化,也不影响业务。

    当然 best practice 中已经写明要通过 volume 或 commit 方式做持久化。但是在思考这些问题的时候,确实上面的几个想法也说的通,所以请大家帮忙分析一下,或者举出一些实际中经常遇到的情况,来反驳上面的几条假设。

    先谢谢各位了

    15 条回复    2016-10-09 17:41:11 +08:00
    lightening
        1
    lightening  
       2016-10-08 23:31:48 +08:00
    主进程挂了 container 就没了
    binux
        2
    binux  
       2016-10-08 23:35:08 +08:00
    你的假设都是没有持久化需求,那当然不要持久化了。
    imxieke
        3
    imxieke  
       2016-10-08 23:35:41 +08:00
    关注一波:, 不过第 1 个有没有考虑宕机问题?或者容器内部出错需要重启的问题?
    rpre
        4
    rpre  
    OP
       2016-10-09 00:59:34 +08:00
    @binux 感谢回复。我的问题正式,持久化需求,在实际业务中,一般体现在哪里。
    @imxieke 同意。
    crysislinux
        5
    crysislinux  
       2016-10-09 01:01:02 +08:00
    @rpre 要保存数据就是持久化,包括数据库,文件
    crysislinux
        6
    crysislinux  
       2016-10-09 01:03:56 +08:00
    没注意你提到了 MySQL 。。
    ldbC5uTBj11yaeh5
        7
    ldbC5uTBj11yaeh5  
       2016-10-09 01:14:15 +08:00 via Android
    docker 💊,他家路子最近歪得厉害。

    网络和存储一直是它家老大难问题,现在根本没花力气解决这些,最终只会沦落大部分时候只作为为程序员的开发和运维工具存在。
    yeasy
        8
    yeasy  
       2016-10-09 08:09:32 +08:00
    一个是持久化,一个是性能~
    xiqingongzi
        9
    xiqingongzi  
       2016-10-09 08:17:41 +08:00 via Android
    不做持久化很简单啊,容器只处理业务逻辑,数据都放在外面。
    Citrus
        10
    Citrus  
       2016-10-09 08:22:54 +08:00 via iPhone
    数据库不做持久化?心这么大?你能保证某天你的所有容器不会先后挂掉来不及复制么?如果你认为你的数据丢了也无所谓,那当我没说。。。丢了无所谓的数据本身就不需要持久化。
    denghongcai
        11
    denghongcai  
       2016-10-09 10:09:20 +08:00
    MySQL 不持久化,机房断电了呢?异地容灾光纤断了呢?要往最坏的方向去想
    killerv
        12
    killerv  
       2016-10-09 10:52:40 +08:00
    MySQL 容器不需要做持久化处理吧,把 MySQL 的数据存储到容器外面
    wizardoz
        13
    wizardoz  
       2016-10-09 12:42:49 +08:00
    我用的不多,但是我遇到有数据的容器都是额外挂载数据目录进去.
    因为我不知道要怎么处理数据放在容器里导致容器越来越大的情况.
    guyskk
        14
    guyskk  
       2016-10-09 16:13:13 +08:00 via Android
    复制并不能避免人为操作的错误。例如管理员突然删除了产品数据,或者部署了错误版本的代码导致搞乱了部分或者全部数据。所以必须要有一个能够让我们从这种场景中恢复数据的备份。

    --- Python web 开发, p181

    刚看书看到这段,大概是这个原因
    mritd
        15
    mritd  
       2016-10-09 17:41:11 +08:00
    有些没看太懂,不过我想说的是确实很多东西需要持久化,比如程序日志,这些日志量很大,而且我们还配合了日志追踪 zipkin ,包括 ELK 分析等等;还有比如你 docker 里跑得是一个 图片上传的 模块,那么这些图片文件肯定要持久化啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2889 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:28 · PVG 20:28 · LAX 04:28 · JFK 07:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.