docker和virtualenv有什麼區別?

在用python搭建app server後台時候,考慮到未來的複製,希望用一個更加集成的開發環境,請問docker和virtualenv技術具體有什麼不同?


virtualenv只是針對python的隔離工具,是藉助語言層面的虛擬機來實現的,不具有通用性。Docker是更底層的虛擬化技術,它是進程級的,也就是說不管什麼語言編寫的程序都會得到相應的服務,主要依賴於內核的CGroup, Namespace, UnionFS。

我們所說的虛擬化一般分為硬體級虛擬化(hardware-level-virtualization)和操作系統級虛擬化(os-level-virtualization)。硬體級虛擬化是運行在硬體之上的虛擬化技術,它的管理軟體也就是我們通常說的hypervisor或者virtual machine monitor,它需要模擬的就是一個完整的操作系統,也就是我們通常所說的基於Hyper-V的虛擬化技術,VMWare, Xen, VirtualBox,亞馬遜AWS和阿里雲都是用的這種技術。操作系統級虛擬化是運行在操作系統之上的,它模擬的是運行在操作系統上的多個不同進程,並將其封裝在一個密閉的容器裡面,也稱為容器化技術。Docker正是容器虛擬化中目前最流行的一種實現。


其實我個人是不喜歡virtualenv這樣的version manager的,大都不是很好用,很多時候你還是要考慮環境的因素。

本著「專業的事交給專業的工具」去做。虛擬化本身就應該由系統層面去解決,而不是語言層面。

早些時候人們用Vmware/VirtualBox做環境的虛擬,但是這玩意太耗資源,打開關閉都需要很長時間,Docker使用Linux Container和相關的技術將虛擬化引入到系統的層級。

所以區別就是

  • virtualenv是python的版本和庫管理器

  • docker是虛擬化整個系統環境工具,docker不僅可以跑python,還可以跑其他的需要進程環境隔離的程序。

Docker目前的問題是:即使你想使用,你還是要了解很多底層的實現細節。相信隨著命令行的簡化,GUI工具的出現,docker會被越來越多的人採用。


開發用virtual env, 跑測試和部署時可以用docker


區別實在太大,你還是找找有什麼相同的吧


Docker 差不多是 Python 解釋器、libc、資料庫、shell 以及你整個 Linux 里所有東西的 virtualenv


本質是一樣的,virtualenv虛擬python運行環境,保證系統python環境的整潔,docker也是一樣,只是它虛擬的是系統運行環境。docker的用途更廣,因為它虛擬的是操作系統。你可以在docker虛擬的操作系統裡面使用virtualenv,但通常沒這個必要。

docker通常和KVM, Xen等虛擬化技術比較。


強烈推薦Docker與虛擬機的區別 http://dockerone.com/article/258


virtualenv 是虛擬化一個python的環境,然後所有的環境都在virtualenv上處理。但是除了python之外的環境,virtualenv是不保證的。

docker是可以虛擬化一整個運行環境,是整個linux環境。


推薦閱讀:

在採購之前如何評估伺服器的性能夠不夠,主要是CPU?
IBM 和 Google 等公司組建的 OpenPower 聯盟,會有何影響?
蘋果要求App強制使用https 。如何把伺服器的 http 協議升級到https 協議?
豆瓣網目前一共用了多少台伺服器?
為什麼此次爐石的伺服器甚至包括備用伺服器,會同時因為斷電而無法搶救維修恢複數據?

TAG:Python | 伺服器 | virtualenv | Docker |