请教熟悉 Docker 的童鞋,Docker 能否应用在这 2 种场景中:(1) Dev on "Any" OS (2) Distribute on "Any" OS

2014-07-18 22:35:46 +08:00
 hustlzp
最近遇到了2个问题,如下:

# 问题一:团队开发环境的搭建

团队都有自己的开发设备,操作系统五花八门,Mac OS、Windows、Linux。无论是前端还是后端,我们都在每个人的OS上搭建完整的开发环境,这个过程很繁琐。而且如果有新成员加入,那又要让他重新按文档去走一遍。而且开发环境是需要持续演进的(比如使用redis、比如将MySQL迁移到PostgreSQL等),那这样的话得一一在每个人的设备上完成演进,很痛苦~

期望:能否在一个统一的Container中开发,从而实现Dev on "Any" OS?

# 问题二:部署环境的多样

如果客户让我们提供整体的Web解决方案,那么一般会使用Ubuntu作为服务器OS。但有时候客户已经有了自己的Server(比如CentOS、RHEL、Debian等,而且版本号不同),所以需要部署在他们提供的环境中。这样的话,即使我们使用统一的开发Stack(比如Python Flask),即使开发的时候环境都没问题,但是在部署的时候问题就来了,不同Server OS在部署过程中总有各种不顺的地方,所以挺耗精力的。

期望:能否在一个统一的Container中发布app,实现Distribute on "Any" OS?

我看了一下Docker的介绍,貌似是很nice的东西。不知道有没有熟悉Docker的童鞋,请教一下Docker能否在上面的2个场景中发挥作用?谢谢了!
8299 次点击
所在节点    DevOps
25 条回复
apai
2014-07-18 23:27:15 +08:00
开发环境共享,一般用vangrant多一些
第二个问题,docker也不好解决把
rio
2014-07-18 23:38:40 +08:00
场景一:基本可行,但在 OS X 和 Windows 上需要借助于虚拟机(主要是 VirtualBox,后续会有 VMware 支持)。Docker 官方提供的工具是 boot2docker,一个轻量级的 Linux 虚拟机镜像用于运行 Docker 服务端,然后 OS X 和 Windows 通过 Docker 客户端访问,项目主页 http://boot2docker.io ,GitHub 地址 https://github.com/boot2docker 。当然你也可以选择 Vagrant + Docker 或者 CoreOS 的方式搭建开发环境。

场景二:看情况。Docker 对 Linux 服务器内核有要求,官方有个支持的 Linux 发行版列表 https://docs.docker.com/installation/#installation 。不过个人不建议在任意环境里部署,Docker 的一大优势就是 reproducibility,任意环境里部署可能会遇到坑。最好是能选择个别官方支持的发行版,然后要求客户提供对应的部署环境。如果性能不是问题,甚至可以部署在虚拟机里面以解决版本问题。



(利益相关申明:我是 boot2docker 项目的 contributor 之一,以上观点仅代表个人。)
liubin
2014-07-19 00:59:03 +08:00
1.
关于第一个问题,像2楼所说,如果你是Linux的话,还是非常赞的。如果是Windows或OS X的话,则稍显麻烦。我用OS X,但我讨厌boot2docker,所以我在OS X里装了Ubuntu,在里面装了Docker。基本上Docker镜像build之后,主需要把端口转发出来(Docker容器->虚拟机或者再到OS X)。

2. 答案是肯定的,当然是服务器要是Linux。Docker可以做到build once,run anywhere。

Docker给开发部署都带来了方便,尤其是部署。但是给运维可能会带来麻烦,只是是暂时。

不过结论还是:Docker值得你拥有。
hustlzp
2014-07-19 01:00:59 +08:00
@apai
@rio
@liubin 谢谢大家,Docker值得拥有啊!
lightening
2014-07-19 01:21:23 +08:00
不能。Docker 不是开发环境工具。如果你需要统一开发环境,用 vagrant.

关于部署,docker 只支持 Linux.
hustlzp
2014-07-19 08:24:28 +08:00
@lightening 恩。看来也需要尝试下Vagrant。
liubin
2014-07-19 08:41:40 +08:00
@lightening 第一各结论不敢苟同。Vagrant只是一个虚拟机管理软件它的特点是能用代码复现一切,从这一点来说,Docker也能做到。而且Docker容器比虚拟机更小,更容易共享,而且具有可移植性,启动速度也快很多。用来开发完全没问题。

@hustizp Vagrant 也是非常不错的工具。

Docker也好,虚拟机也好,选择合适自己的最重要。
hustlzp
2014-07-19 09:47:16 +08:00
@liubin 是的,需要在实践中摸索。
lightening
2014-07-19 17:18:42 +08:00
@liubin Docker 做开发的话,怎么写入镜像?每次对文件系统做修改都要加一个 layer 吗?
Docker 的用法是一次把所有的东西写成 dockerfile 直接一次成型,如果做了点修改,想保存下来必须新建 layer。这样对于频繁写入的开发环境显然是不合适的。
tonyluj
2014-07-19 20:53:27 +08:00
开发的话,很显然用vagrant

docker方面,同意 @lightening

在windows下面用docker的话,就是虚拟机里面再嵌入一个docker,还不如直接用vagrant

vagrant相对于virtualbox只是方便一点,直接用vbox也是不错,只不过性能没kvm好,更不及docker
liubin
2014-07-21 11:21:32 +08:00
@lightening Docker镜像是分层的,共享的,如果base镜像稳定的话,每次创建新镜像是很快的。所以这不是问题。虚拟机才有此问题(box命令除外)。
lightening
2014-07-21 15:22:21 +08:00
@liubin 但是你每一次开发完一点东西想保存的时候怎么办?
liubin
2014-07-21 16:48:42 +08:00
@lightening 保存什么?代码?
我觉得代码的commit和Docker镜像的创建可以分开进行的。

开发的时候可以通过-v选项在host和container之间共享文件夹,实际代码保存一份。build镜像的时候拷贝到镜像里去。
lightening
2014-07-21 17:25:17 +08:00
@liubin 任何文件呀。开发的时候总是要频繁更改镜像的文件系统的。每次修改都创建一个 layer 太麻烦。
liubin
2014-07-21 18:35:08 +08:00
@lightening 我觉得这个问题是可以避免的,使用共享文件夹。Docker容器就是一个已停用程序运行环境。
dingyaguang117
2014-07-21 18:52:10 +08:00
生产环境系统都是 CentOS 5 怎么办?
lightening
2014-07-21 19:19:21 +08:00
@liubin 你用 ruby 的话需要安装 gem, 用 python 需要用 pip.
liubin
2014-07-22 08:42:43 +08:00
@lightening 你不会每天都更新Gemfile吧?Bundle没试过,貌似可以像NPM那样安装到当前文件夹,PIP不熟悉。
julyclyde
2014-08-02 15:31:22 +08:00
@dingyaguang117 centos5就只好格式化换装了。这系统实在太旧了……
JohnDeng
2014-08-02 16:31:22 +08:00
对于隔离跟共享开发环境,Vagrant才是真爱,使用Docker还是在需要测试分布式系统的时候才能发挥最大效益。

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

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

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

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

© 2021 V2EX