公司内部准备用 docker 逐步替换掉原本直接搭在 LVS 上的测试环境,将分散的物理机资源整合起来。
按照我的思路,新拿一台 LVS 跑 docker,然后一个服务起一个容器,容器配好、互通正常,基本这活儿就算结了。
结果今天突然来个需求,说让我把几个服务一起塞到一个容器里(譬如一个 container 里面同时跑 NGINX+MySQL+Tomcat )。
单容器多服务这种做法到底有没有意义……我感觉这又回到 LVS 的形式上了。

公司内部准备用 docker 逐步替换掉原本直接搭在 LVS 上的测试环境,将分散的物理机资源整合起来。
按照我的思路,新拿一台 LVS 跑 docker,然后一个服务起一个容器,容器配好、互通正常,基本这活儿就算结了。
结果今天突然来个需求,说让我把几个服务一起塞到一个容器里(譬如一个 container 里面同时跑 NGINX+MySQL+Tomcat )。
单容器多服务这种做法到底有没有意义……我感觉这又回到 LVS 的形式上了。
1 akagishigeru Oct 31, 2018 推荐一个 container 一个应用 |
2 CivAx OP @JaguarJack 对我也是这么认为的,但是应该怎么列举优势说服他? |
3 LoliconInside Oct 31, 2018 @CivAx 一旦一个容器异常退出整个业务就全挂了 感觉只能这么和他说 |
4 hoiyd Oct 31, 2018 你需要 kubernetes 的 pod |
5 nooper Oct 31, 2018 脑子为啥有问题,直接把服务干挂了。 |
6 zpf124 Oct 31, 2018 单单 nginx + tomcat 我还能理解一些, 把 mysql 都加上就完全不应该了吧? |
7 Keria Oct 31, 2018 一些开源软件为了用户开箱即用把很多东西塞进一个容器,自己搭服务觉得没必要,有编排呀~ |
8 ksco Oct 31, 2018 1. 更加易于横向扩展 2. 更容易定位问题 3. 更容易升级版本号 4. 日志更加清晰明确 ...... |
9 helone Oct 31, 2018 gitlab 官方也是这么封装的,其实无非就是一炸都炸和不方便扩展而已。。。 |
10 xiqingongzi Oct 31, 2018 ngx + tomcat 问题不是很大。mysql 不应该。 |
11 ixiaohei Oct 31, 2018 你们需要 docker 编排和 k8s 这种东西。放一个容器,supervisor 一挂全部挂。另外水平扩展也是一起扩,反而没有体现 docker 的优势,轻量虚拟化和资源隔离。 |
12 liuguang Oct 31, 2018 当然是一个容器一个应用了,docker 如果发现了你的容器进程退出了,可以帮你自动重启。 但是如果多个放在一个 container 里面,如果非主线程退出了,你完全不知道,docker 也不会认为你的容器有问题。 |
13 fl2d Oct 31, 2018 一损俱损 一荣俱荣 |
14 akagishigeru Oct 31, 2018 @CivAx 例如你有 php 和 java 两个 container 都需要连接 mysql 服务呢? mysql 难道打包两次吗 |
15 kimqcn Oct 31, 2018 没啥问题啊,这仨东西都可以做成绿色版的,解压即用.放到一个容器里,可不考虑网络连接问题. |
16 wizardoz Oct 31, 2018 他是不是不知道 docker-compose ? |
17 whileFalse Oct 31, 2018 所以这个把所有东西揉一起的需求的目的是什么? |
18 zjsxwc Oct 31, 2018 docker-compose +1 |
19 fullpowers Oct 31, 2018 数据库放另外一个容器就行了,其它打包一起 |
20 xenme Oct 31, 2018 想折腾,你都可以当成虚拟机用,打包一个配置啥的都简单,短期可能更快 微服务化,单独打包,得考虑编排了,前期可能有人觉得复杂 可以分步来么,不可能一口吃个胖子 |
21 yule111222 Oct 31, 2018 没意义 |
22 xuanbg Oct 31, 2018 没有意义,一个容器还是多个容器,差别仅仅是一点点磁盘空间罢了。 |
23 sammo Oct 31, 2018 via iPhone 把 container 当一层 “普通 vps 的 linux 系统” 式的虚拟机嘛 ... |
24 Vhc Oct 31, 2018 支持一楼 |
25 likuku Oct 31, 2018 容器当虚拟机来用的典型案例 |
26 CMGS Oct 31, 2018 很简单。。 你跟他说,你要塞,OK,你以哪个为主进程? 多进程容器最大的问题是,从容器外部只看得到主进程的状态,容器本身生命周期是和主进程完全同步的。 也就是说,要么你放弃子进程生命周期的控制,要么你自己实现子进程的监控重启各种生命周期的事情。 既然要搞这么多幺蛾子,为啥不 vm+systemd 搞定一切…… |
28 kidlj Oct 31, 2018 via iPhone Docker by design 一个容器一个进程。 |
29 slaneyang Oct 31, 2018 docker-compose ++ |
30 CuminLo Oct 31, 2018 既然是用与测试环境,这个问题应该不大吧,主要是你想不想的问题了。 |
31 NUT Oct 31, 2018 docker 的本质是进程。除了主进程其他进程都是野孩子。所以你需要容器编排。k8s 的 pod 可以搞成多容器的,如果有启动顺序要求可以试试 statusfulset 这个玩意。 |
32 lihongjie0209 Oct 31, 2018 k8s 吧 |
33 kaneg Oct 31, 2018 via iPhone 用它来搭建测试环境,用来简化部署和测试的效率,那就越简单越好,做到傻瓜式的开箱即用,所有的服务都打到一起是很好的选择。当然再进一步用 docker compose 也是很不错的,至于 k8s 在这种场景下就有点大炮打蚊子了 |
34 beginor Oct 31, 2018 via Android 如果你的产品安装复杂,可以简化安装,比如 gitlab |
35 Tink PRO 这个东西得辩证来看 |
36 lfzyx Oct 31, 2018 如果你是要把分散的服务器资源整合起来,那用 k8s 就非常适合了,然后 k8s 里的 pod 也是可以包含多个 container 的,非常符合几个服务一起塞到一个 pod 里的需求 |
37 liukanshan Nov 1, 2018 不太明白把所有应用塞进一个容器的做法 docker-compse 就是为了解决这种情况的 也许这种方式更适合 vagrant。 |
38 ooh Nov 1, 2018 via Android 解耦,三个应用想不清楚就幻想三百个应用 |
39 binux Nov 1, 2018 测试环境这么搞没毛病啊,难道你测试环境还需要跑 300 个应用负载均衡吗? 测试环境这么搞的好处就是开箱即用,可以同时跑多个测试环境,然后玩坏了直接干掉重建就好了。挂就挂了呗,测试环境哪来的业务啊。 |
40 thrall Nov 1, 2018 测试环境就打包到一起没什么问题 |
41 vindurriel Nov 1, 2018 via iPhone 一个 container 一个进程 容器编排服务一般是这么假设的 |
42 duhongle Nov 1, 2018 推荐使用 docker-compose,nginx,tomcat,mysql 还是分开部署比较好 |
43 bayker Nov 1, 2018 请问为啥要放一起?给个理由。感觉没有任何理由能说服我放到一个容器里。 |
44 shylockhg Nov 1, 2018 你这样一个容器没法编排。。一炸全炸 |
45 liuyanjun0826 Nov 1, 2018 象征意义大于实际意义 |
46 thisisgpy Nov 1, 2018 简单来说,你把所有东西 run 在一个容器里,如果容器里的 mysql 有容器外的应用也在用,那你升级你的应用重启容器时,所有依赖容器内 mysql 的服务都会瘦影响。 |
47 lrh3321 Nov 1, 2018 组成一个整体,里面只对外开放一个应用服务的时候也不是不行。 |
48 mortonnex Nov 1, 2018 docker-compose 完美解决 |
49 tcsky Nov 1, 2018 测试环境完全还可以啊, 开发测试维护起来都很方便 |
50 xiaoxinshiwo Nov 1, 2018 个人觉得不合适,容器的一大特点就是隔离性啊 |
51 Outshine Nov 1, 2018 提需求的人明显不懂 docker 的意义,放在一个 container 里和现在有啥区别么?反而还加了一层。 |
52 tailf Nov 1, 2018 跟他们说性能有问题,docker 的 tcp-proxy 对应用内大流量的支持不足 |
53 momocraft Nov 1, 2018 给不会的人用时有意义 (一行 docker run 能启动全套服务) 会用 docker-compose / k8s 这些东西时就多余了 |
54 y835L9DyC5XD09kq Nov 1, 2018 不要把鸡蛋都放在一个篮子里 |
55 MarioxLinux Nov 1, 2018 作为运维我不会这样做,因为这和传统的部署方式并没太大差别,一定要说有没有意义,对开发来说是有意义的好处是可以在开发调试过程中更便捷 |
56 CoderGeek Nov 1, 2018 k8s docker |
57 artandlol Nov 1, 2018 yaml 配置文件语言的兴起,可以让程序自动配置 yaml 编排更加智能化 小巧 隔离是容器的特点,塞进去除了能玩一玩没别的好处 我这个容器就塞进去很多,rootfs 挺好的,push 容器时可以不用上传全部 https://hub.docker.com/r/jingslunt/linux/ |
58 eas Nov 1, 2018 没有意义 |
59 skylancer Nov 1, 2018 意义就是 1. 懒人的超快速部署(呵呵) 2. 给新手学习的包 3. 闲得蛋疼或者是傻子 |
60 xiaoyunwei2 Nov 1, 2018 测试环境 随便搞咯 |
61 ray1888 Nov 1, 2018 你就每个进程开一个容器,用一个 docker-compose 拉起来不就可以了? 如果不用 K8s 的情况下 |
62 tabris17 Nov 1, 2018 如果不打算扩容也无所谓了 |
63 lionseun Nov 2, 2018 via Android 那还用 dock er 干嘛? |
64 huobazi Nov 3, 2018 via iPhone 觉得省空间? |