docker 对普通个人开发者的作用,求指点

2019-05-17 10:15:38 +08:00
 ynohoahc

最近在学习 docker 但是越学越不清楚自己为什么要学 docker

其中最大的疑惑是 服务器上用 docker 去部署项目真能节省很多资源吗? 比如说 用 docker 在机器上部署了几十个 api 服务 去对比 用传统的 tomcat 在本地部署几十个 api 服务

因为每开一个容器都相当于多开了一个基础 linux 镜像, 然后再在这个基础镜像里跑 tomcat 服务

基础镜像无论有多轻量 好歹也是一部分开销呢

所以从直观感觉上还是觉得后者会省资源一点 但外界宣传就是说容器会更轻量 呃~~

还有一个不小的疑惑就是, 对于普通个人开发者来说(我只想平日里没事接接外单, 挣点零花钱), 那么 docker 带来的好处是不是只有一个就是能统一开发环境呢?

有实操的前辈们能讲讲吗?

14860 次点击
所在节点    程序员
95 条回复
FrankHB
2019-05-17 23:09:05 +08:00
跑点题,这玩意儿技术上的出发点就是对没法方便隔离环境的具体负载的变通。
如果能跑的东西本来就有机制能方便隔离,那么仅仅是为了让环境干净,再套一个间接层的收益自然不大——这里的收益是相对的,很多时候是通过相对替代方案降低成本体现。例如虚拟机比物理机省事,操作系统支持的 namespace 实现的隔离比虚拟机省事,等等。
但就原始目的来讲,这样的比较也不是绝对的,因为隔离会有功能限制上的代价。隔离完倒腾环境是省事了,但能做的事情往往就少了,在同一个实例上部署其它玩意儿的可能性通常也减少了。所以越是对通用性和灵活性要求越高的场合,细粒度的隔离限制越明显。极端情况下,如果目的不止是隔离,还要强调完整地模拟其它环境,那么当然就不是越轻量越好。比如像 WSL2 不也得依赖虚拟化么,为啥不按 WSL 的套路来?
还有个问题也是显然的:隔离出来的实例多了就容易冗余。只是业务系统上跑的东西相对专一,本来就无所谓多少共享的依赖,独立部署自然无所谓。不过开发机上来讲,如果不是为了测试生产环境,这样显然不太划算(除非你一个开发机只打算管一个项目)。考虑这点,用隔离环境的思路来实现解决共存这样的问题就明显是跑偏了。要实现这样的目的,应该用更细粒度的非完全隔离的机制,比如 nixpkgs 之类的包管理方案。不过这类东西可能太偏向开发者了,运维基本都没概念更不可能流行,别指望近些年内能在公共生产环境用上,作为开发者还得自己负担环境差异带来的额外成本,于是基本只能自己玩自己的。
dyllen
2019-05-17 23:15:13 +08:00
个人感受是对于普通开发者就是搞环境方便,用完就没什么用处了,docker 主要是用在运维上面方便,各种扩展方便。
容器又不是运行在 vm 上面的,vm 是虚拟了硬件,docker 并没有虚拟硬件,用的资源都是主机的。
1010543618
2019-05-17 23:24:38 +08:00
docker 给客户部署应用多方便啊,要是所有客户都能直接给你一台服务器就另说了
miao1007
2019-05-17 23:41:40 +08:00
docker 可以搭建 overlay 网络,多台 ip 一起跑
KigKrazy
2019-05-18 00:41:35 +08:00
如果你需要管理很多台机器才用,或者需要部署的程序很多。不然如果只有一两个程序其实没必要,增加负担。
resouer
2019-05-18 04:08:52 +08:00
节省资源有一百种方法,打包应用和 OS 依赖就容器镜像这一种方法。建议读一下这个: https://www.infoq.cn/article/R1p3H3_29f4TYImExsyw
lionseun
2019-05-18 09:21:00 +08:00
一键搭建一个 MySQL 一键搭一个 Redis 互不影响,线上本地环境一致
AlexaZhou
2019-05-18 09:54:31 +08:00
等你遇到需要部署几十上百台机器的时候,就知道 docker 好用了
abcbuzhiming
2019-05-18 10:13:06 +08:00
对于个人开发者来说最大的好处是环境隔离,无污染
部署的便捷性要成百上千台机器的时候才体现的出来。k8s 对个人用户不是刚需,但是隔离环境这点确实是刚需
charlie21
2019-05-18 11:14:38 +08:00
环境隔离:虚拟机 vagrant 能做到、docker 也能做到
资源隔离:docker composer 能做到
* 离开了 xx 就不会写代码了 [1]:docker 能做到

docker 隐藏的细节太多,这会直接导致很多人看似使用了 docker 的便利,实则离开 docker 就不会写代码了(等于把能力捆绑到了 docker 上)。有人将为此付出代价

(设计师说离开 photoshop 就不会作图了,尚可理解,运维人员说离开 docker 就不会搞运维了,这表明已经将自己的知识栈捆绑在 docker 上,只会沦为笑柄。比如 给你两个看似能起一样作用的 container 哪个好哪个坏都分不出来,快速 pull 了有啥用?直接给你安个后门你会排查问题吗?性能监控更是没得谈了 -- “负载均衡” 这个名词是什么含义 那些 docker 步道者是不会告诉你的,你就一把梭就对了

docker will cost you, docker 只是有钱人的玩具,但是你不会因为玩了它而变成有钱人,反而会先染上富贵病

[1]: 离开了 Borg 都不知道怎么写代码
https://www.infoq.cn/article/R1p3H3_29f4TYImExsyw
lonelygo
2019-05-18 12:14:33 +08:00
这么说吧:有个项目,后端比较杂,相隔时代久远,不同 JDK、Py2、Py3 都有。
老板安排了新功能开发,为了省钱,就给了一台机子让你部署测试环境。

传统部署:起 VM,一台一台 VM 先装起来,然后按照不同版本一台一台装机,然后再部署。嗯,如果运气好,一天没了,如果运气不好,再来一天。
Docker 呢?一个环境,两条命令,pull / run,就酱。
CitizenR
2019-05-18 13:38:48 +08:00
当我开发需要当前系统不提供的数据库版本时,我体会出 docker 的好了。
ZSeptember
2019-05-18 14:09:23 +08:00
个人开发没啥大用。
不会直接节约资源,只是细粒度的调控资源,可以提高资源利用率。
有了各种编排平台以后,对公司内部的开发,测试,部署有不少好处。
mzdblsw8
2019-05-18 17:20:31 +08:00
我觉得先试着用。不喜欢就不用上。
mml
2019-05-18 19:42:55 +08:00
“别家孩子都在学”

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/564937

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX