V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
CivAx
V2EX  ›  程序员

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

  •  
  •   CivAx · Oct 31, 2018 · 16412 views
    This topic created in 2734 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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