Docker 的主要优势是能让开发环境和生产环境保持一致,部署时也能方便扩容。
Python Web 项目,用 virtualenv 来隔离一个独立的环境,在 mac , linux , win 三种开发环境下,也都能隔离出一个通用的开发环境和依赖库文件。在部署生产机也用相同的 virtualenv 环境,包括扩容,也很干净方便。
现在都是用的云主机,实际上是在硬件上虚拟的计算环境,再在这个虚拟的环境中,再用 docker 虚拟一个开发环境,来开发和部署 Python web 项目,有必要吗?比 virtualenv 环境优势在哪儿?
1
kanezeng 2016-11-04 08:15:24 +08:00
刚开始用 Python 做项目不知道我对 virtualenv 的理解对不对。 VirutalEnv 你要先有服务器,然后在上面配好虚拟的环境,然后再部署自己的程序,对么?
docker 的话,写好 dockerfile 之后,这些是可以自动的,所以你需要自动化环境的时候就很方便,比如临时需要自动增加减少服务器的实例之类的 |
2
KKKKKK 2016-11-04 08:29:07 +08:00 via Android
virtualenv 只是用来隔离 Python 版本,做不到其他的隔离。
|
3
pc10201 2016-11-04 09:18:56 +08:00
virtualenv 做到包隔离, pyenv 能做 python 版本隔离, docker 的隔离性更好,但是有一些 openvz 的 vps 不支持
|
4
tolerance 2016-11-04 09:23:27 +08:00
一个项目用 python2.7,另一个用 python3.5
|
5
smartdie 2016-11-04 09:24:12 +08:00
建议了解一下持续交付之类运维的知识,如果放在开发上, docker 确实好处不明显。
|
6
wyntergreg 2016-11-04 09:31:34 +08:00
Docker 的主要优势是能让开发环境和生产环境保持一致,部署时也能方便扩容。
这是虚拟环境的主要优势,不是 docker 的优势 docker 的优势比这多多了 不然为什么有虚拟机还要用 docker ? |
7
deadEgg 2016-11-04 09:44:41 +08:00
“ Docker 的主要优势是能让开发环境和生产环境保持一致”
这句话理解起来有偏差。 Docker 的主要优势的是让 生产环境和理想生产环境一致。 简单理解可以是同一个虚拟环境,所以方便大规模部署,比如分布式。 这仅仅是交付上的,如果有大规模计算的话存在 docker 的编排系统会更好地对多容器的策略管理 回答楼主问题 1. 现在都是用的云主机,实际上是在硬件上虚拟的计算环境,再在这个虚拟的环境中,再用 docker 虚拟一个开发环境,来开发和部署 Python web 项目,有必要吗 如果同一个程序需要部署 1000 台主机,假如这 1000 台主机是同时有硬件和软件差异的, docker 可以提供一致性的条件 2. 比 virtualenv 环境优势在哪儿 假设这样一个场景,如果同一个程序需要部署 1000 台主机,假如这 1000 台主机是同时有硬件和软件差异的,你的 python 程序对系统软件有需求(比如需求特定操作系统依赖) ,那你需要对 1000 台都去 cherk 这个依赖的正确性。 再假设这样一个场景,如果你的环境被黑了, docker 也可以提供一个更安全的环境。 |
8
janxin 2016-11-04 09:48:37 +08:00
|
9
rogwan OP @deadEgg 从两个角度分开去看, Docker 优势又都不怎么突出了啊:
1 、关于开发环境和生产环境的一致性:用 venv 也可以解决“我本机上跑通了的啊,怎么线上挂了”的问题 。 2 、云主机的部署和运维:也不需要每台机器装系统&配置环境,直接镜像部署就可以,也比较方便的。 |
10
9hills 2016-11-04 10:48:11 +08:00
python-lxml 等一票 c/c++依赖表示 virtualenv 只能说是很一般的隔离。。。
|
11
phithon 2016-11-04 11:30:58 +08:00
|
12
timothyqiu 2016-11-04 11:34:22 +08:00
virtualenv 只是用来隔离不同工程所需的不同的依赖的。
|
13
deadEgg 2016-11-04 12:21:25 +08:00
@rogwan
1. 11 楼回复正解 2. 镜像部署相比 docker 有缺点,缺点在于分布式的粒度没有 docker 小, docker 他的实现不是基于虚拟化而是基于 chroot 、 namespace 、 cgourp 这些存在于本机内核的环境隔离(所以很轻量),比如说一台物理机你跑虚拟化的资源肯定比不上 docker 的资源占用小。 |
15
qweweretrt515 2016-11-04 12:45:37 +08:00
docker 是一个文本文件,里面写好了命令,在服务器执行一下,然后你就去喝咖啡, 你的项目会自动部署好
你用 pyv 还要自己一个命令一个命令的弄半天 这就是差距 |
16
lightening 2016-11-04 17:57:18 +08:00
没什么必须的。适合自己的就是最好的。
Docker 的优势是一个用一个 Dockerfile 可以方便的 scale 出任意台一样的主机。 缺点是你需要付出额外的成本来进行配置。每个 container 要做成 stateless 的,数据库要用外置。如果你的项目很小,这个是额外的麻烦。 多台主机部署和运维可以用 Ansible 啊。也不一定要 Docker 。 |
17
param 2016-11-04 17:58:08 +08:00 via Android
用 docker 的好处,难道不是在 PostgreSQL 、 Redis 、 elastic search 这些组件上吗?全都 docker 化了。
|
18
param 2016-11-04 17:59:44 +08:00 via Android
我在尝试用 docker-compose 部署 Django 项目
|
19
poke707 2016-11-04 18:04:02 +08:00
部署时好处比较明显,因为内部的复杂度都被容器屏蔽了。
除非出于好奇或学习的目的,在使用这个或那个系统时是不需要关心内部的。 但对于足够简单的项目,不用容器也复杂不了多少。 |
21
crossmaya 2016-11-09 10:55:09 +08:00
docker 的好处不是环境统一,组件隔离吗!
|