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

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

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

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

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

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

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

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

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

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