Python Web 项目(如 django, flask)有必要上 Docker 吗?感觉 virtualenv 的环境隔离已经够用了啊 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://divintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
rogwan

Python Web 项目(如 django, flask)有必要上 Docker 吗?感觉 virtualenv 的环境隔离已经够用了啊

  •  1
     
  •   rogwan Nov 4, 2016 8781 views
    This topic created in 3461 days ago, the information mentioned may be changed or developed.

    Docker 的主要优势是能让开发环境和生产环境保持一致,部署时也能方便扩容。

    Python Web 项目,用 virtualenv 来隔离一个独立的环境,在 mac , linux , win 三种开发环境下,也都能隔离出一个通用的开发环境和依赖库文件。在部署生产机也用相同的 virtualenv 环境,包括扩容,也很干净方便。

    现在都是用的云主机,实际上是在硬件上虚拟的计算环境,再在这个虚拟的环境中,再用 docker 虚拟一个开发环境,来开发和部署 Python web 项目,有必要吗?比 virtualenv 环境优势在哪儿?

    21 replies    2016-11-09 10:55:09 +08:00
    kanezeng
        1
    kanezeng  
       Nov 4, 2016
    刚开始用 Python 做项目不知道我对 virtualenv 的理解对不对。 VirutalEnv 你要先有服务器,然后在上面配好虚拟的环境,然后再部署自己的程序,对么?
    docker 的话,写好 dockerfile 之后,这些是可以自动的,所以你需要自动化环境的时候就很方便,比如临时需要自动增加减少服务器的实例之类的
    KKKKKK
        2
    KKKKKK  
       Nov 4, 2016 via Android
    virtualenv 只是用来隔离 Python 版本,做不到其他的隔离。
    pc10201
        3
    pc10201  
       Nov 4, 2016
    virtualenv 做到包隔离, pyenv 能做 python 版本隔离, docker 的隔离性更好,但是有一些 openvz 的 vps 不支持
    tolerance
        4
    tolerance  
       No 4, 2016
    一个项目用 python2.7,另一个用 python3.5
    smartdie
        5
    smartdie  
       Nov 4, 2016
    建议了解一下持续交付之类运维的知识,如果放在开发上, docker 确实好处不明显。
    wyntergreg
        6
    wyntergreg  
       Nov 4, 2016
    Docker 的主要优势是能让开发环境和生产环境保持一致,部署时也能方便扩容。

    这是虚拟环境的主要优势,不是 docker 的优势

    docker 的优势比这多多了

    不然为什么有虚拟机还要用 docker ?
    deadEgg
        7
    deadEgg  
       Nov 4, 2016
    “ Docker 的主要优势是能让开发环境和生产环境保持一致”

    这句话理解起来有偏差。

    Docker 的主要优势的是让 生产环境和理想生产环境一致。

    简单理解可以是同一个虚拟环境,所以方便大规模部署,比如分布式。

    这仅仅是交付上的,如果有大规模计算的话存在 docker 的编排系统会更好地对多容器的策略管理

    回答楼主问题

    1. 现在都是用的云主机,实际上是在硬件上虚拟的计算环境,再在这个虚拟的环境中,再用 docker 虚拟一个开发环境,来开发和部署 Python web 项目,有必要吗

    如果同一个程序需要部署 1000 台主机,假如这 1000 台主机是同时有硬件和软件差异的, docker 可以提供一致性的条件

    2. 比 virtualenv 环境优势在哪儿

    假设这样一个场景,如果同一个程序需要部署 1000 台主机,假如这 1000 台主机是同时有硬件和软件差异的,你的 python 程序对系统软件有需求(比如需求特定操作系统依赖) ,那你需要对 1000 台都去 cherk 这个依赖的正确性。

    再假设这样一个场景,如果你的环境被黑了, docker 也可以提供一个更安全的环境。
    janxin
        8
    janxin  
       Nov 4, 2016
    @deadEgg 实际上安全作用很小,这个是另外一个话题

    其实 Virtualenv 比较麻烦的一个点在于如果需要 C/C++依赖时这个就很麻烦了,就像 @deadEgg 提到的那样,对运维带来的收益比开发大得多。
    rogwan
        9
    rogwan  
    OP
       Nov 4, 2016
    @deadEgg 从两个角度分开去看, Docker 优势又都不怎么突出了啊:
    1 、关于开发环境和生产环境的一致性:用 venv 也可以解决“我本机上跑通了的啊,怎么线上挂了”的问题 。
    2 、云主机的部署和运维:也不需要每台机器装系统&配置环境,直接镜像部署就可以,也比较方便的。
    9hills
        10
    9hills  
       Nov 4, 2016
    python-lxml 等一票 c/c++依赖表示 virtualenv 只能说是很一般的隔离。。。
    phithon
        11
    phithon  
       Nov 4, 2016
    @rogwan
    一看你就没装过 pillow 、 python-lxml 、 psycopg2 。昨天还有人跟我反馈他在 centos 上死也装不好 psycopg2 。
    楼上说得对~
    timothyqiu
        12
    timothyqiu  
       Nov 4, 2016
    virtualenv 只是用来隔离不同工程所需的不同的依赖的。
    deadEgg
        13
    deadEgg  
       Nov 4, 2016
    @rogwan

    1. 11 楼回复正解
    2. 镜像部署相比 docker 有缺点,缺点在于分布式的粒度没有 docker 小, docker 他的实现不是基于虚拟化而是基于 chroot 、 namespace 、 cgourp 这些存在于本机内核的环境隔离(所以很轻量),比如说一台物理机你跑虚拟化的资源肯定比不上 docker 的资源占用小。
    rogwan
        14
    rogwan  
    OP
       Nov 4, 2016
    @deadEgg 你说到要点上了,我知道差别啦,赞
    qweweretrt515
        15
    qweweretrt515  
       Nov 4, 2016
    docker 是一个文本文件,里面写好了命令,在服务器执行一下,然后你就去喝咖啡, 你的项目会自动部署好

    你用 pyv 还要自己一个命令一个命令的弄半天

    这就是差距
    lightening
        16
    lightening  
       Nov 4, 2016
    没什么必须的。适合自己的就是最好的。

    Docker 的优势是一个用一个 Dockerfile 可以方便的 scale 出任意台一样的主机。

    缺点是你需要付出额外的成本来进行配置。每个 container 要做成 stateless 的,数据库要用外置。如果你的项目很小,这个是额外的麻烦。

    多台主机部署和运维可以用 Ansible 啊。也不一定要 Docker 。
    param
        17
    param  
       Nov 4, 2016 via Android
    用 docker 的好处,难道不是在 PostgreSQL 、 Redis 、 elastic search 这些组件上吗?全都 docker 化了。
    param
        18
    param  
       Nov 4, 2016 via Android
    我在尝试用 docker-compose 部署 Django 项目
    poke707
        19
    poke707  
       Nov 4, 2016
    部署时好处比较明显,因为内部的复杂度都被容器屏蔽了。

    除非出于好奇或学习的目的,在使用这个或那个系统时是不需要关心内部的。

    但对于足够简单的项目,不用容器也复杂不了多少。
    janxin
        20
    janxin  
       Nov 4, 2016 via iPhone
    @poke707 在集群上做容器编排简直就是小公司噩梦…
    crossmaya
        21
    crossmaya  
       Nov 9, 2016
    docker 的好处不是环境统一,组件隔离吗!
    About     Help     Advertise     Blog     API     FAQ     Solana     4561 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 129ms UTC 10:11 PVG 18:11 LAX 03:11 JFK 06:11
    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