V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hustlzp
V2EX  ›  DevOps

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

  •  2
     
  •   hustlzp · 2014-07-18 22:35:46 +08:00 · 8264 次点击
    这是一个创建于 3784 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近遇到了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个场景中发挥作用?谢谢了!
    第 1 条附言  ·  2014-07-21 17:08:02 +08:00
    第 2 条附言  ·  2014-08-02 15:24:13 +08:00
    http://www.fig.sh

    Fast, isolated development environments using Docker.
    25 条回复    2014-08-03 00:48:54 +08:00
    apai
        1
    apai  
       2014-07-18 23:27:15 +08:00   ❤️ 1
    开发环境共享,一般用vangrant多一些
    第二个问题,docker也不好解决把
    rio
        2
    rio  
       2014-07-18 23:38:40 +08:00   ❤️ 8
    场景一:基本可行,但在 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
        3
    liubin  
       2014-07-19 00:59:03 +08:00   ❤️ 1
    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
        4
    hustlzp  
    OP
       2014-07-19 01:00:59 +08:00
    @apai
    @rio
    @liubin 谢谢大家,Docker值得拥有啊!
    lightening
        5
    lightening  
       2014-07-19 01:21:23 +08:00 via iPhone   ❤️ 1
    不能。Docker 不是开发环境工具。如果你需要统一开发环境,用 vagrant.

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

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

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

    docker方面,同意 @lightening

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

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

    开发的时候可以通过-v选项在host和container之间共享文件夹,实际代码保存一份。build镜像的时候拷贝到镜像里去。
    lightening
        14
    lightening  
       2014-07-21 17:25:17 +08:00
    @liubin 任何文件呀。开发的时候总是要频繁更改镜像的文件系统的。每次修改都创建一个 layer 太麻烦。
    liubin
        15
    liubin  
       2014-07-21 18:35:08 +08:00
    @lightening 我觉得这个问题是可以避免的,使用共享文件夹。Docker容器就是一个已停用程序运行环境。
    dingyaguang117
        16
    dingyaguang117  
       2014-07-21 18:52:10 +08:00
    生产环境系统都是 CentOS 5 怎么办?
    lightening
        17
    lightening  
       2014-07-21 19:19:21 +08:00 via iPhone
    @liubin 你用 ruby 的话需要安装 gem, 用 python 需要用 pip.
    liubin
        18
    liubin  
       2014-07-22 08:42:43 +08:00
    @lightening 你不会每天都更新Gemfile吧?Bundle没试过,貌似可以像NPM那样安装到当前文件夹,PIP不熟悉。
    julyclyde
        19
    julyclyde  
       2014-08-02 15:31:22 +08:00
    @dingyaguang117 centos5就只好格式化换装了。这系统实在太旧了……
    JohnDeng
        20
    JohnDeng  
       2014-08-02 16:31:22 +08:00
    对于隔离跟共享开发环境,Vagrant才是真爱,使用Docker还是在需要测试分布式系统的时候才能发挥最大效益。
    hustlzp
        21
    hustlzp  
    OP
       2014-08-02 16:42:10 +08:00
    @JohnDeng 谢谢!现在在收集各种有用的资料和工具,过段时间就开始折腾Vagrant :)
    undeflife
        22
    undeflife  
       2014-08-02 17:03:25 +08:00
    vagrant很痛苦 在windows上.
    virtualbox的shared folder有严重的性能问题 Mac OS 还能用nfs ,windows上只能用smb或者rsync。
    smb性能也不行,而碰到文件多层次多的时候 vagrant的rsync也不太正常
    hustlzp
        23
    hustlzp  
    OP
       2014-08-02 20:20:17 +08:00
    @undeflife 这...
    ETiV
        24
    ETiV  
       2014-08-03 00:47:30 +08:00
    @undeflife
    vagrant 没用过.
    virtualbox 的网络驱动也有问题
    ETiV
        25
    ETiV  
       2014-08-03 00:48:54 +08:00
    @undeflife
    vagrant 没用过.

    Windows 下 VirtualBox 的网络驱动也有问题.

    那个共享主机网段模式下, 我电脑出现过上传 100Mbps 的情况. 搞的办公室路由差点挂了...后来改成NAT就好了.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1098 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 108ms · UTC 19:36 · PVG 03:36 · LAX 11:36 · JFK 14:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.