公司内部准备用 docker 逐步替换掉原本直接搭在 LVS 上的测试环境,将分散的物理机资源整合起来。
按照我的思路,新拿一台 LVS 跑 docker,然后一个服务起一个容器,容器配好、互通正常,基本这活儿就算结了。
结果今天突然来个需求,说让我把几个服务一起塞到一个容器里(譬如一个 container 里面同时跑 NGINX+MySQL+Tomcat )。
单容器多服务这种做法到底有没有意义……我感觉这又回到 LVS 的形式上了。
1
JaguarJack 2018-10-31 16:06:57 +08:00
推荐一个 container 一个应用
|
2
CivAx OP @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 搞定一切…… |
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 1
用它来搭建测试环境,用来简化部署和测试的效率,那就越简单越好,做到傻瓜式的开箱即用,所有的服务都打到一起是很好的选择。当然再进一步用 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
觉得省空间?
|