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

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

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

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

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

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

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

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

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

14699 次点击
所在节点    程序员
95 条回复
ynohoahc
2019-05-17 14:40:48 +08:00
@dreamusername 我觉得是这样的
razertory
2019-05-17 14:49:49 +08:00
假如你一台 linux 机器上需要跑两个服务 A 和 B,并且 A 和 B 跑起来的需要额外安装基础组件 C。不巧的是,A 需要版本 V1.0.0, B 需要版本 V2.0.0。这时候如果 V2.0.0 没有做到向下兼容的话,运维同学就不得不在一个机器安装两个版本不一样的 C。但是!又发现同时安装起来会报冲突。

如果是 docker 的话可以在各自的容器中安装需要的 C。

以上。对于个人本地开发同样适用
justfly
2019-05-17 14:55:10 +08:00
容器的意义就是隐藏要部署的服务的细节 ( python go java 各种环境),从而有一套统一的接口进行操控,其实就是标准化。

在此之上构建自动调度才更加简单。这些好处在你只有一台服务器,几个进程时体现不出来。你能体会到的就是本机开发有了开箱即用的环境。
jorneyr
2019-05-17 15:16:47 +08:00
一般小公司还真没太大用,Docker 在微服务盛行的今天,当服务器压力扛不住后 (小公司有几个业务好到阵发的服务器压力太大?),快速增加服务器,快速使用 Docker 部署,启动新服务,关键就是快快快,在部署的时候差不多就是复制粘贴然后就能启动服务了,不需要在新系统上逐个的安装配置各种软件了。
www5070504
2019-05-17 15:36:31 +08:00
“每开一个容器都相当于多开了一个基础 linux 镜像”

感觉你把 docker 理解成了类似虚拟机的东西 虽然可以这么理解

但是底层没有像虚拟机那样虚拟化所以性能损失要少很多

docker 的意义在于方便的统一开发和部署环境 以及 部署流程的问题吧

如果让运维去部署 运维很多时候也不知道你这个要怎么启动运行 可能你还得写个启动脚本 就更费劲了。。
sevncz
2019-05-17 15:56:10 +08:00
隔离环境,安装各种服务不用修改本机环境
yuhr123
2019-05-17 16:10:23 +08:00
环境隔离呀,这很重要。
干干净净的来,干干净净的走。
menyakun
2019-05-17 16:53:08 +08:00
menyakun
2019-05-17 16:58:32 +08:00
@dreamusername openjdk 再往下看一层就是了,*-stretch,*-alpine 就代表是从不同发行版 build 出来的
ynohoahc
2019-05-17 17:40:52 +08:00
@bjfane 这个不对嘛?
我们写 Dockerfile 的时候不是经常写 COPY、WORKDIR 的嘛
如果不是每一个容器有一个基础镜像的话 那么这些操作怎么解释呢?
HuasLeung
2019-05-17 17:43:30 +08:00
kaneg
2019-05-17 17:54:40 +08:00
无论是对开发还是运维好处都太多。别的不说,以前开发环境部署一套 Oracle 几天都搞不定,还得专业人员干,现在随便抓过来个开发分分钟就搞定了。
choury
2019-05-17 18:04:34 +08:00
@ynohoahc #70 有基础镜像,但是他们并不需要运行起来,最多占用点磁盘空间,这就是和 vm 有区别的地方。vm 管理的是一个系统,要跑内核的,但是容器管理的是进程,推荐的做法就是一个容器跑一个进程。所以我们可以认为,用容器起进程和直接在机器上起一个进程相比没有额外的开销,只是会损失一点 io (网络,磁盘)性能(大概 5%,也远小于 vm )
FantaMole
2019-05-17 18:11:21 +08:00
从我的体验来说,在新机器上搭环境变得很简单,不同时期的项目的语言版本和框架版本依赖都是不同的,本地环境只需要 docker,执行 docker build + docker run 两条命令就能快速构建,快速开始测试。从我上家公司的架构层面来讲,微服务后,老项目抽离成服务由 PHP 构成,新服务是由 Java 构成,能让两套开发语言并存。甚至后来我们后端的技术栈还加上了 Node.js 和 Golang,这些都要依靠容器
0x8C
2019-05-17 18:18:38 +08:00
我在 mac 上写 golang 装 docker 主要是为了解决交叉编译的问题
galaxyyao
2019-05-17 18:25:02 +08:00
#### “因为每开一个容器都相当于多开了一个基础 linux 镜像, 然后再在这个基础镜像里跑 tomcat 服务”
在去看下 docker 原理吧。Namespace+Cgroups 的开销相比虚机的 Hypervisor+Guest OS 不知道低了多少了。
如果都使用的是同一个 tomcat 镜像,那么通过 overlay2,就算开 10 个容器,存储空间都只需要 1 份。

#### “用传统的 tomcat 在本地部署几十个 api 服务”
如果指的是 1 个 tomcat 上 10 个 webapp,那么的确是比 10 个容器占用的资源少。但就像楼上已经说的“ 10 个鸡蛋放在一个篮子里”,能承受 1 个 webapp OOM 导致所有 webapp 不能访问的风险么?根本不用说对每个 webapp 控制 Xms 和 Xmx 内存占用了。
如果指的是 10 个 tomcat,每个 tomcat 里一个 webapp,那么负载约等于 10 个 tomcat 的容器。但容器在编排,CI/CD 的简易程度,对环境依赖的灵活性,高可用负载均衡等等很多方面远胜。

#### 对于普通个人开发者
做私活的好处楼上已经说了。
另一个好处是如果应用需要依赖数据库 /redis/消息队列等等中间件,以前只有两种方案:要么是依赖一个公共基础环境,会遇到和其他人互相修改对方数据的冲突。debug 了半天发现原来是数据被别人改掉了这种恶心事情发生频率还是挺高的。要么是在本机搭,但如果是 windows/mac 开发机,还必须需要这个中间件在 windows/mac 上有安装包。
如果有容器,就本地 pull+run 一把梭,问题解决。
cf020031308
2019-05-17 18:29:18 +08:00
容器不同于虚拟机,是非常轻的。当然再轻也就像你说的一样会有额外开销,反过来又可以说,虽然有额外开销但是非常轻。所以不用纠结,学就是了。
好处就是封装了环境,不影响宿主机。不但对于公司有好处,对于个人开发者也是好的,比如我之前写过一篇文章 https://cf020031308.github.io/blog/workplace-refactory (装逼用蹩脚英文写的)就是说这事,最近升级了 Majove 又搞破一堆环境,很是心累。
另外一个好处就是环境固化成了配置文件,交付能力提高了,新机配置无比简单。打破了开发与运维之间的混乱墙,不然也不会几乎同时流行起 DevOps 概念了。
billlee
2019-05-17 22:21:39 +08:00
@noahzh #12 你这举了个最不恰当的例子吧。JDK 只要设置 PATH 和 JAVA_HOME 就好了,一台机器放上各个版本 JDK 完全没有问题的,应用也可以自带全部依赖。麻烦的是环境隔离做得不好的 C, python 这些。
FrankHB
2019-05-17 22:50:51 +08:00
@loading 基于 HyperV 的直接就是虚拟机了……
真要开发还得另说;但光就部署讲,要是直接已经有提供了个 docker image 的情况,还费事把它拆出来自己撸一遍重新部署,那是没事找事。
native
2019-05-17 22:57:34 +08:00
比如我在这家公司搞了一边开发换环境。到了那个公司还得在搞一遍。有了 docker 就不一样了。 把环境写到 dockerfile 中到了直接运行生成自己需要的开发环境

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

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

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

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

© 2021 V2EX