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

docker 应用和数据库应该像在同一镜像里吗?

  •  
  •   comeluder · 2018-01-17 09:32:46 +08:00 · 4842 次点击
    这是一个创建于 2504 天前的主题,其中的信息可能已经有所发展或是发生改变。
    docker 应用和数据库应该像在同一镜像里吗,求教各路大神~~~~
    25 条回复    2018-01-18 16:40:35 +08:00
    solooo
        1
    solooo  
       2018-01-17 09:35:13 +08:00
    分开,应用是应用,数据库是数据库
    comeluder
        2
    comeluder  
    OP
       2018-01-17 09:41:15 +08:00
    @solooo 我也是这么想,但我们经理想弄在一起,方便,我也感觉不太合理,问问大家怎么弄的~~
    rockyou12
        3
    rockyou12  
       2018-01-17 09:43:45 +08:00
    一定要分开。如果你是单机部署,写个 docker-compose.yml 就好了,如果是 kubelet 这些也有 pod 这些抽象,分开了一样方便。
    wellsc
        4
    wellsc  
       2018-01-17 09:47:03 +08:00
    不应该,container 应该是无状态的
    codehz
        5
    codehz  
       2018-01-17 09:51:17 +08:00 via Android
    @wellsc 我觉得楼主说的应该是应用和数据库程序都在一个镜像里。。。
    codehz
        6
    codehz  
       2018-01-17 09:52:49 +08:00 via Android
    我个人认为应用和数据库应该分离在不同的镜像,这样可以方便单独重新部署应用。。。当然如果是 demo 这种类型的项目,就是怎么方便怎么来的
    neoblackcap
        7
    neoblackcap  
       2018-01-17 09:54:39 +08:00
    k8s 就是分开的
    mooncakejs
        8
    mooncakejs  
       2018-01-17 09:56:58 +08:00 via iPhone
    如果是自己公司业务持续升级的。数据库分开,如果是阿里云之类的,最好用 RDS 之类的产品。
    如果是外包或者产品发布的,打成一个包也不错。gitlab 就是个很好的例子。
    wellsc
        9
    wellsc  
       2018-01-17 09:57:36 +08:00
    @codehz #5 就算是和数据库程序放在一起也是有状态的,数据库程序其实就是代表了数据,数据库程序运行不起来应用也读不了数据对不对?
    zhengxiaowai
        10
    zhengxiaowai  
       2018-01-17 10:04:51 +08:00
    数据库都不应该放在 Docker 里面
    liuzelei
        11
    liuzelei  
       2018-01-17 10:07:38 +08:00
    @zhengxiaowai nod,db 这种重度 io 的 app,不应该放在 docker 中部署。
    abmin521
        12
    abmin521  
       2018-01-17 10:18:36 +08:00
    挂了 volume 随便玩
    yonoho
        13
    yonoho  
       2018-01-17 10:22:02 +08:00
    @comeluder 你要是拗不过他就在 dockerfile 里严格分层,万一以后玩不转了直接拆成两个 dockerfile。
    fatduo
        14
    fatduo  
       2018-01-17 10:25:23 +08:00
    个人认为数据库这些有状态服务,不应该使用容器和容器编排技术,至少生产环境不应该。
    gamexg
        15
    gamexg  
       2018-01-17 11:21:31 +08:00 via Android
    分开,扩展方便。
    forgetandnew
        16
    forgetandnew  
       2018-01-17 11:48:25 +08:00 via iPhone
    看需求
    ETO
        17
    ETO  
       2018-01-17 11:49:45 +08:00
    分开
    trepwq
        18
    trepwq  
       2018-01-17 11:52:34 +08:00
    在一个容器里和虚拟机有什么区别。。
    ifaii
        19
    ifaii  
       2018-01-17 12:24:22 +08:00 via iPhone
    @trepwq 区别老大了,系统级和应用级的区别
    20has
        20
    20has  
       2018-01-17 12:54:49 +08:00 via Android
    要我说就无所谓 只要你的数据库卷做了持久化 不管是 data volume 还是分布式存储 都行 前提是业务访问量不大
    monnand
        21
    monnand  
       2018-01-17 12:57:50 +08:00 via Android
    @fatduo #13

    > 个人认为数据库这些有状态服务,不应该使用容器和容器编排技术,至少生产环境不应该。

    至少在 Google 所有东西都是在容器(Borg 系统)里的。包括各种数据库类应用,比如 BigTable Spanner 等

    但是数据库存储的内容不要做成镜像的一部分。这一点 Kubernetes 应该已经做了一套方案
    feverzsj
        22
    feverzsj  
       2018-01-17 13:01:03 +08:00
    哈哈,当然可以放在一起,只是再部署的时候,你得把容器重新保存成镜像
    fatduo
        23
    fatduo  
       2018-01-17 14:17:14 +08:00
    @monnand
    我说的情况是容器和机器没有绑定的情况,如果容器和机器完全绑定,这和在这台机器上直接起服务没有太多本质区别。
    k8s 是提供了 statefulset 作为有状态服务的部署,可以通过 pvc 挂载 volume 的形式,实现服务(pod)漂后重新挂载存储,数据不丢失。但这种基于网络存储并不是适合 db 这种重 io 的服务。。。
    HuHui
        24
    HuHui  
       2018-01-17 17:07:31 +08:00
    分开
    julyclyde
        25
    julyclyde  
       2018-01-18 16:40:35 +08:00
    @trepwq 虚拟机能重新开机,容器不能吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3612 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:01 · PVG 19:01 · LAX 03:01 · JFK 06:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.