请教熟悉 Docker 的童鞋,Docker 能否应用在这 2 种场景中:(1) Dev on "Any" OS (2) Distribute on "Any" OS - V2EX
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 8794 次点击
    这是一个创建于 4178 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近遇到了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/span>
    @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     Solana     2639 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 12:12 PVG 20:12 LAX 04:12 JFK 07:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86