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

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

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

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

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

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

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

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

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

14390 次点击
所在节点    程序员
95 条回复
ynohoahc
2019-05-17 10:42:43 +08:00
@GiantHard 嗯这个的确是我学习 docker 的初衷
kevinhwang
2019-05-17 10:48:30 +08:00
@ynohoahc 普通 Linux 使用者。
boris1993
2019-05-17 10:49:05 +08:00
从用户角度谈一下

Docker 对我来说最大的好处是,不会搞脏我本机的环境

比如我要用个 PHP 的应用,brew install php 之后,它不仅会装 PHP,还会装一堆依赖,久而久之各种东西会越来越乱

但是现在我只需要取个合适的 PHP 的镜像,把应用塞进去,就可以了,本机不会装任何其他的东西,嗯,干净
d5
2019-05-17 10:52:25 +08:00
“.” Build, Ship, and Run Any App, Anywhere.
whileFalse
2019-05-17 10:53:48 +08:00
十年前我买域名买 vps 用一键脚本装 lamp,装代理。文档一大篇一大篇,装的时候如果网络报错,或者一不小心敲错命令,那就只能吧机器磁盘重置了,重来一遍。

现在有了 Docker 体验是什么呢?搜索看看哪个镜像好用,然后 docker run -p 80:80 very-good-image 搞定。
bjfane
2019-05-17 10:58:43 +08:00
每开一个容器都相当于多开了一个基础 linux 镜像 这个不对吧
whusnoopy
2019-05-17 10:59:11 +08:00
docker 对个人而言的一个明显的好处是可以相对于传统虚拟机做相对轻量的环境隔离

比如你有好几个项目,有一个依赖最新的 python 3.7.0,另一个年久失修只能跑在 python 2.6 下,你怎么同时维护能允许这两个项目的环境? Python 还好一点可以用 pyenv 加 virtualenv 做隔离,其他的语言我不熟悉,不确定是否有类似的简单方法做隔离。如果你是用虚拟机来隔离,那每个虚拟机的环境怎么装?是不是也费劲。以及,你自己隔离好了虚拟机,怎么发布和分享给别人?再来做一次虚拟机环境初始化?还是直接把虚拟机硬盘拷给对方?如果是 docker,直接一个 docker 配置文件就能相对于虚拟机更轻量的隔离并启动
wdy3334
2019-05-17 11:02:34 +08:00
@whileFalse #25 去哪儿找靠谱的镜像,全靠自己分辨吗?
tiedan
2019-05-17 11:03:13 +08:00
linux 基础镜像有啥开销?唯一的开销就是多占用了几百 MB 的磁盘和几 KB 的内存。
jameskuk
2019-05-17 11:05:51 +08:00
我们可以把环境+代码做成一个镜像,这样不用再去管远端真实环境,特别是在部署集群的时候,好处显而易见。

还有个方面我补充一下。曾经有个项目在 aws 上,除了生产以外的环境,都是上班时间创建实例,部署服务,下班了,销毁实例,一年省了不少钱。你要手动搞或者写个很复杂的脚本,成本肯定比 docker 大很多。
jjianwen68
2019-05-17 11:06:04 +08:00
docker 是个好东西
jackleeforce3615
2019-05-17 11:07:16 +08:00
环境隔离是最大的好处。
zjyl1994
2019-05-17 11:08:28 +08:00
docker 的优势在于方便部署啊,你要得闲裸机上一个一个依赖装,这样肯定省资源,但是调到 100%拉起来的成本太高了
ghos
2019-05-17 11:12:11 +08:00
比如我装一个 tinyrss 需要:
tinyrss 本体
mercury api
opencc api
pg 数据库
还要占用不知道多少个机器的端口
现在一键安装部署 暴露出一个端口 美滋滋得很啊
ghos
2019-05-17 11:14:27 +08:00
接上 搞这么一套 没有部署脚本 最快要几个小时 一键安装实在太舒坦了
zong400
2019-05-17 11:15:56 +08:00
tomcat 本地部署几十个 api

tomcat 一挂全部挂,一个 api 出问题( oom )全部挂,维护一个 api 全部重启,更新 tomcat、jdk 版本(修漏洞)全部重启,这样你不觉得可怕吗
Luckyray
2019-05-17 11:17:58 +08:00
最大的优势应该就是环境的一致性了,足以改变软件的分发方式。比如有的复杂应用需要装环境,装类库,假如有几百台服务器需要部署,对运维来说是巨大的挑战。某一次发布版本,部分依赖更新了怎么办?或者单台物理机上,两个应用的依赖冲突了怎么办?有了 docker,那种“我本地没问题的啊”的问题应该具不会出现了。

其次,应该是资源的隔离,上面说的 tomcat 上部署几个应用,当然可以,其中一个应用负载突然暴增,整个物理机托挂了怎么办? docker 可以直接限制内存占用、cpu 核心数量,应用要死只会自己死。

然后对个人开发来说,有个好处就是保持自己机器在整洁。经常遇到需要临时安装某些功能或者类库,执行了几个命令之后,它稀里哗啦下载了一堆东西,用完了也不好删除,一是不知道在哪,二是怕误删。有了 docker 不长期用的功能就可以不放在物理机上。我个人开发电脑上就没装 mysql、nginx 这些东西,还有一些使用频次比较低的命令行,都放在了容器里,不用的时候直接关闭容器,还能节省资源。
lihongjie0209
2019-05-17 11:18:47 +08:00
这个问题要从不同的角度回答

1. 作为软件开发者,你可以把 docker 当作软件的分发渠道,可以避免用户的繁琐配置
2. 作为软件使用者, 你可以把 docker 当作软件的一种形式,可以直接"双击运行"
3. 作为大规模集群的运维, 你以为他们用的是 docker, 其实他们用的是 k8s, 只是碰巧底层调度的是 docker 而已, 这个东西和个人使用一点关系都没有.
zong400
2019-05-17 11:22:11 +08:00
为什么在 vm 里跑 docker ?这是基础资源管理的问题
你理解的 vm 底层其实是各种云,阿里云、腾讯云、openstack (自建云)等,这些是为了把机房、机架、实体服务器、实体网络等一大堆资源整合利用,也可以说是把这是物理层面的东西虚拟化透明化了。
而 docker 则是把 OS 虚拟化透明化,就是楼上说的各种跨版本啦、一键部署环境啦这些,开发就只需要专注于代码就好了,这是对程序员或者个人最大的好处。
micean
2019-05-17 11:24:20 +08:00
我现在都是直接用 idea 的 docker 插件直接把程序部署到测试环境……那还用得着中间搭个 jenkins ……

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

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

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

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

© 2021 V2EX