Docker 是怎样解决 package dependency 问题的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DjvuLee
V2EX    Docker

Docker 是怎样解决 package dependency 问题的?

  •  
  •   DjvuLee 2014-12-10 12:34:30 +08:00 3870 次点击
    这是一个创建于 3957 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如我的一个应用程序依赖python3.0,但是我即将部署的OS上默认安装的是python2.5的。那么Docker是怎样解决这个依赖问题的?我自己发布的时候,把这个Python3.0打包进去?

    我在Docker的github官网上看到这样的描述:
    Docker solves dependency hell by giving the developer a simple way to express all their application's dependencies in one place, and streamline the process of assembling them

    不太理解具体是怎样实现的?我给出我需要的环境依赖,其他由Docker来下载并配置好?
    14 条回复    2014-12-31 11:11:26 +08:00
    binux
        1
    binux  
       2014-12-10 13:02:29 +08:00
    把这个Python3.0打包进去
    icylogic
        2
    icylogic  
       2014-12-10 13:24:41 +08:00 via Android   1
    python 官方有 3.3 和 3.4 的dockerfile,改一下 version以后 build 一个自己的 3.0 image 应该就可以了。
    DjvuLee
        3
    DjvuLee  
    OP
       2014-12-10 13:36:31 +08:00
    @binux 如果多个程序都有这样一个类似的需求,那是每个程序都需要打包一个呢?这样的话,那很浪费空间了。还是说程序之间会共享呢?
    icylogic
        4
    icylogic  
       2014-12-10 13:47:57 +08:00 via Android
    @DjvuLee image 之间没有关系,一般来讲除非遇到这种用 python 3.0 的非主流需求,否则,比如 python 3.3 或者 3.4 或者 2.7 你可以直接在dockerfile里一句 from python:3.3 解决
    fwee
        5
    fwee  
       2014-12-10 14:11:33 +08:00
    @DjvuLee 没错,硬盘不值钱。就算你一个container 1G,一台服务器上部署20个app才20G
    binux
        6
    binux  
       2014-12-10 14:13:36 +08:00
    @DjvuLee 层可以共享,可以叠加,但是不能混合,比如你可以基于 unbuntu 的层,做一个 python3.0 的层,再基于 python3.0 做各个程序,这时候的 python3.0 可以共享。

    但是你不能做一个 python3.0 的层,同时需要 mysql,这时不能把 mysql 混进来,只能在 python3.0 的层上装 mysql,或者在 mysql 的层上装 python3.0
    xiaket
        7
    xiaket  
       2014-12-10 16:06:58 +08:00
    @binux 貌似如果有mysql, 则应将mysql放到单独的container里.
    DjvuLee
        8
    DjvuLee  
    OP
       2014-12-10 17:09:06 +08:00
    @fwee 哈哈~看来有钱,就是任性!
    DjvuLee
        9
    DjvuLee  
    OP
       2014-12-10 17:11:49 +08:00
    @fwee 硬盘是不值钱。但是如果app体积很大,那么下载,上传或者迁移都很耗费网络流量吧!今天的data center里面网络还是一个很稀缺的资源。不知道Docker在这方面有没有一些什么策略?
    DjvuLee
        10
    DjvuLee  
    OP
       2014-12-10 17:15:14 +08:00
    @binux 如果是叠加的话,底层的进行了变更,还是有可能导致上层应用出现问题吧?虽然这个场景还是会比以前好很多。
    DjvuLee
        11
    DjvuLee  
    OP
       2014-12-10 17:17:25 +08:00
    @xiaket Docker允许上层基于多个底层不?比如我一个Docker App同时基于MySQL和Python3.0的层,就像多继承一样。
    xiaket
        12
    xiaket  
       2014-12-11 11:32:51 +08:00
    @DjvuLee don't
    siteshen
        13
    siteshen  
       2014-12-31 10:54:01 +08:00
    @DjvuLee 上传下载image是一次性的,参照不用docker时搭建服务器环境,比如安装 mysql, redis,架构确定了后,基本一个月不会变的。

    叠加的话,底层是“不会”变的,虽然你可以从一个历史commit里新增内容,但某一个commit里面的内容 **永远** 不会变。参考 git 里面的历史纪录,尽管可以 git commit --amend 但 amend 之后是另外一个commit,ID和原来的commit不同。
    siteshen
        14
    siteshen  
       2014-12-31 11:11:26 +08:00
    @DjvuLee 如果是叠加的话,底层的进行了变更,还是有可能导致上层应用出现问题吧?
    刚我说的可能和你说的问题有些偏差。对应到不用docker的部署流程,升级系统或者升级 redis 可能会导致问题。正常的部署流程,同样也要面对升级问题,这属于应用/运维层的事,docker不可能照顾到各式各样的应用。docker 做了 image 之后,相当于把相应的服务器和软件版本冻结了。如果要升级系统,image 就得重新 build,重新build之后是否还能工作,只能靠人去确保。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5792 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 137ms UTC 06:16 PVG 14:16 LAX 23:16 JFK 02:16
    Do have faith in what you're doing.
    ubao 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