把多个应用服务塞进一个 docker 容器里有没有意义 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
CivAx
V2EX    程序员

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

  •  
  •   CivAx 2018-10-31 16:04:34 +08:00 15971 次点击
    这是一个创建于 2537 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    会用 docker-compose / k8s 这些东西时就多余了
    y835L9DyC5XD09kq
        54
    y835L9DyC5XD09kq  
       2018-11-01 10:29:18 +08:00
    不要把鸡蛋都放在一个篮子里
    MarioxLinux
        55
    MarioxLinux  
       2018-11-01 11:37:32 +08:00
    作为运维我不会这样做,因为这和传统的部署方式并没太大差别,一定要说有没有意义,对开发来说是有意义的好处是可以在开发调试过程中更便捷
    CoderGeek
        56
    CoderGeek  
       2018-11-01 15:16:55 +08:00
    k8s docker
    artandlol
        57
    artandlol  
       2018-11-01 15:26:09 +08:00
    yaml 配置文件语言的兴起,可以让程序自动配置 yaml 编排更加智能化
    小巧 隔离是容器的特点,塞进去除了能玩一玩没别的好处
    我这个容器就塞进去很多,rootfs 挺好的,push 容器时可以不用上传全部
    https://hub.docker.com/r/jingslunt/linux/
    eas
        58
    eas  
       2018-11-01 15:29:14 +08:00
    没有意义
    skylancer
        59
    skylancer  
       2018-11-01 16:18:03 +08:00
    意义就是
    1. 懒人的超快速部署(呵呵)
    2. 给新手学习的包
    3. 闲得蛋疼或者是傻子
    xiaoyunwei2
        60
    xiaoyunwei2  
       2018-11-01 16:20:14 +08:00
    测试环境 随便搞咯
    ray1888
        61
    ray1888  
       2018-11-01 17:58:57 +08:00
    你就每个进程开一个容器,用一个 docker-compose 拉起来不就可以了? 如果不用 K8s 的情况下
    tabris17
        62
    tabris17  
       2018-11-01 18:02:23 +08:00
    如果不打算扩容也无所谓了
    lionseun
        63
    lionseun  
       2018-11-02 09:14:02 +08:00 via Android
    那还用 dock er 干嘛?
    huobazi
        64
    huobazi  
       2018-11-03 06:57:24 +08:00 via iPhone
    觉得省空间?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1205 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:30 PVG 01:30 LAX 10:30 JFK 13:30
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86