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

把多个应用服务塞进一个 docker 容器里有没有意义

  •  
  •   CivAx · 115 天前 · 5726 次点击
    这是一个创建于 115 天前的主题,其中的信息可能已经有所发展或是发生改变。

    公司内部准备用 docker 逐步替换掉原本直接搭在 LVS 上的测试环境,将分散的物理机资源整合起来。

    按照我的思路,新拿一台 LVS 跑 docker,然后一个服务起一个容器,容器配好、互通正常,基本这活儿就算结了。

    结果今天突然来个需求,说让我把几个服务一起塞到一个容器里(譬如一个 container 里面同时跑 NGINX+MySQL+Tomcat )。

    单容器多服务这种做法到底有没有意义……我感觉这又回到 LVS 的形式上了。

    64 回复  |  直到 2018-11-03 06:57:24 +08:00
        1
    JaguarJack   115 天前
    推荐一个 container 一个应用
        2
    CivAx   115 天前
    @JaguarJack 对我也是这么认为的,但是应该怎么列举优势说服他?
        3
    LoliconInside   115 天前   ♥ 2
    @CivAx 一旦一个容器异常退出整个业务就全挂了 感觉只能这么和他说
        4
    hoiyd   115 天前
    你需要 kubernetes 的 pod
        5
    nooper   115 天前
    脑子为啥有问题,直接把服务干挂了。
        6
    zpf124   115 天前
    单单 nginx + tomcat 我还能理解一些, 把 mysql 都加上就完全不应该了吧?
        7
    Keria   115 天前
    一些开源软件为了用户开箱即用把很多东西塞进一个容器,自己搭服务觉得没必要,有编排呀~
        8
    ksco   115 天前   ♥ 3
    1. 更加易于横向扩展
    2. 更容易定位问题
    3. 更容易升级版本号
    4. 日志更加清晰明确
    ......
        9
    helone   115 天前
    gitlab 官方也是这么封装的,其实无非就是一炸都炸和不方便扩展而已。。。
        10
    xiqingongzi   115 天前
    ngx + tomcat 问题不是很大。mysql 不应该。
        11
    ixiaohei   115 天前   ♥ 1
    你们需要 docker 编排和 k8s 这种东西。放一个容器,supervisor 一挂全部挂。另外水平扩展也是一起扩,反而没有体现 docker 的优势,轻量虚拟化和资源隔离。
        12
    liuguang   115 天前
    当然是一个容器一个应用了,docker 如果发现了你的容器进程退出了,可以帮你自动重启。
    但是如果多个放在一个 container 里面,如果非主线程退出了,你完全不知道,docker 也不会认为你的容器有问题。
        13
    fl2d   115 天前
    一损俱损 一荣俱荣
        14
    JaguarJack   115 天前   ♥ 1
    @CivAx 例如你有 php 和 java 两个 container 都需要连接 mysql 服务呢? mysql 难道打包两次吗
        15
    kimqcn   115 天前
    没啥问题啊,这仨东西都可以做成绿色版的,解压即用.放到一个容器里,可不考虑网络连接问题.
        16
    wizardoz   115 天前   ♥ 1
    他是不是不知道 docker-compose ?
        17
    whileFalse   115 天前
    所以这个把所有东西揉一起的需求的目的是什么?
        18
    zjsxwc   115 天前   ♥ 1
    docker-compose +1
        19
    fullpowers   115 天前
    数据库放另外一个容器就行了,其它打包一起
        20
    xenme   115 天前
    想折腾,你都可以当成虚拟机用,打包一个配置啥的都简单,短期可能更快
    微服务化,单独打包,得考虑编排了,前期可能有人觉得复杂

    可以分步来么,不可能一口吃个胖子
        21
    yule111222   115 天前
    没意义
        22
    xuanbg   115 天前
    没有意义,一个容器还是多个容器,差别仅仅是一点点磁盘空间罢了。
        23
    sammo   115 天前 via iPhone
    把 container 当一层 “普通 vps 的 linux 系统” 式的虚拟机嘛 ...
        24
    Vhc   115 天前
    支持一楼
        25
    likuku   115 天前   ♥ 2
    容器当虚拟机来用的典型案例
        26
    CMGS   115 天前   ♥ 2
    很简单。。
    你跟他说,你要塞,OK,你以哪个为主进程?
    多进程容器最大的问题是,从容器外部只看得到主进程的状态,容器本身生命周期是和主进程完全同步的。
    也就是说,要么你放弃子进程生命周期的控制,要么你自己实现子进程的监控重启各种生命周期的事情。
    既然要搞这么多幺蛾子,为啥不 vm+systemd 搞定一切……
        27
    rogwan   115 天前 via Android
    @helone gitlab 这么做情有可原,毕竟从头开始配好 gitlab 很多人就放弃了
        28
    kidlj   115 天前 via iPhone
    Docker by design 一个容器一个进程。
        29
    slaneyang   115 天前
    docker-compose ++
        30
    CuminLo   115 天前
    既然是用与测试环境,这个问题应该不大吧,主要是你想不想的问题了。
        31
    NUT   115 天前
    docker 的本质是进程。除了主进程其他进程都是野孩子。所以你需要容器编排。k8s 的 pod 可以搞成多容器的,如果有启动顺序要求可以试试 statusfulset 这个玩意。
        32
    lihongjie0209   115 天前
    k8s 吧
        33
    kaneg   115 天前 via iPhone
    用它来搭建测试环境,用来简化部署和测试的效率,那就越简单越好,做到傻瓜式的开箱即用,所有的服务都打到一起是很好的选择。当然再进一步用 docker compose 也是很不错的,至于 k8s 在这种场景下就有点大炮打蚊子了
        34
    beginor   115 天前 via Android
    如果你的产品安装复杂,可以简化安装,比如 gitlab
        35
    Tink   115 天前 via iPhone
    这个东西得辩证来看
        36
    lfzyx   115 天前
    如果你是要把分散的服务器资源整合起来,那用 k8s 就非常适合了,然后 k8s 里的 pod 也是可以包含多个 container 的,非常符合几个服务一起塞到一个 pod 里的需求
        37
    liukanshan   115 天前
    不太明白把所有应用塞进一个容器的做法 docker-compse 就是为了解决这种情况的 也许这种方式更适合 vagrant。
        38
    ooh   115 天前 via Android
    解耦,三个应用想不清楚就幻想三百个应用
        39
    binux   115 天前
    测试环境这么搞没毛病啊,难道你测试环境还需要跑 300 个应用负载均衡吗?
    测试环境这么搞的好处就是开箱即用,可以同时跑多个测试环境,然后玩坏了直接干掉重建就好了。挂就挂了呗,测试环境哪来的业务啊。
        40
    thrall   115 天前
    测试环境就打包到一起没什么问题
        41
    vindurriel   114 天前 via iPhone
    一个 container 一个进程 容器编排服务一般是这么假设的
        42
    duhongle   114 天前
    推荐使用 docker-compose,nginx,tomcat,mysql 还是分开部署比较好
        43
    bayker   114 天前
    请问为啥要放一起?给个理由。感觉没有任何理由能说服我放到一个容器里。
        44
    shylockhg   114 天前
    你这样一个容器没法编排。。一炸全炸
        45
    liuyanjun0826   114 天前
    象征意义大于实际意义
        46
    thisisgpy   114 天前
    简单来说,你把所有东西 run 在一个容器里,如果容器里的 mysql 有容器外的应用也在用,那你升级你的应用重启容器时,所有依赖容器内 mysql 的服务都会瘦影响。
        47
    lrh3321   114 天前
    组成一个整体,里面只对外开放一个应用服务的时候也不是不行。
        48
    mortonnex   114 天前
    docker-compose 完美解决
        49
    tcsky   114 天前
    测试环境完全还可以啊, 开发测试维护起来都很方便
        50
    xiaoxinshiwo   114 天前
    个人觉得不合适,容器的一大特点就是隔离性啊
        51
    Outshine   114 天前
    提需求的人明显不懂 docker 的意义,放在一个 container 里和现在有啥区别么?反而还加了一层。
        52
    tailf   114 天前
    跟他们说性能有问题,docker 的 tcp-proxy 对应用内大流量的支持不足
        53
    momocraft   114 天前
    给不会的人用时有意义 (一行 docker run 能启动全套服务)

    会用 docker-compose / k8s 这些东西时就多余了
        54
    kangkang   114 天前
    不要把鸡蛋都放在一个篮子里
        55
    MarioxLinux   114 天前
    作为运维我不会这样做,因为这和传统的部署方式并没太大差别,一定要说有没有意义,对开发来说是有意义的好处是可以在开发调试过程中更便捷
        56
    CoderGeek   114 天前
    k8s docker
        57
    artandlol   114 天前
    yaml 配置文件语言的兴起,可以让程序自动配置 yaml 编排更加智能化
    小巧 隔离是容器的特点,塞进去除了能玩一玩没别的好处
    我这个容器就塞进去很多,rootfs 挺好的,push 容器时可以不用上传全部
    https://hub.docker.com/r/jingslunt/linux/
        58
    eas   114 天前
    没有意义
        59
    skylancer   114 天前
    意义就是
    1. 懒人的超快速部署(呵呵)
    2. 给新手学习的包
    3. 闲得蛋疼或者是傻子
        60
    xiaoyunwei2   114 天前
    测试环境 随便搞咯
        61
    ray1888   114 天前
    你就每个进程开一个容器,用一个 docker-compose 拉起来不就可以了? 如果不用 K8s 的情况下
        62
    tabris17   114 天前
    如果不打算扩容也无所谓了
        63
    lionseun   113 天前 via Android
    那还用 dock er 干嘛?
        64
    huobazi   112 天前 via iPhone
    觉得省空间?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   756 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 22:39 · PVG 06:39 · LAX 14:39 · JFK 17:39
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1