共計 3017 個字符,預計需要花費 8 分鐘才能閱讀完成。
這篇文章主要介紹“docker 與傳統虛擬化的區別是什么”,在日常操作中,相信很多人在 docker 與傳統虛擬化的區別是什么問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”docker 與傳統虛擬化的區別是什么”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!
docker 是什么?
docker,它是一個基于 LXC(LinuX Container)的高級容器引擎,使用 Go 語言開發,遵循 Apache2.0 協議,全部開源代碼均托管在 github 上(https://github.com/docker/docker)。它誕生于 2013 年初,最初發起者是 dotCloud 公司,該公司現已經改名為 Docker Inc,專注于 Docker 相關技術和產品的開發。
目前,主流的 linux、windows 和 mac 都已經支持 docker。需要注意的是,由于 docker 是基于 LXC 的,所以除了 linux 之外的操作系統,都是靠在虛擬機里面跑 linux,再在 linux 上跑 docker 來實現的。
docker 誕生的主要目標是 Build,Ship and Run Any App,Anywhere,即通過對應用組件的封裝 (Packaging)、分發(Deployment)、部署(Deployment)、運行(Runtime) 等生命周期的管理,達到應用組件級別的 一次封裝,到處運行。這里的應用組件,既可以是一個 web 應用,也可以是一套數據庫服務,甚至是一個操作系統或者編譯器。
LXC 是什么?
docker 引擎的基礎是 Linux 容器(linux container,LXC)技術。IBM DevelperWorks 上給出了關于容器技術的準確描述:
容器有效地將單個操作系統管理的資源劃分到孤立的組中,以便更好地在孤立的組之間平衡有沖突的資源使用需求。與虛擬化相比,這樣既不需要指令級模擬,也不需要即時編譯。容器可以在核心 CPU 本地運行指令,而不需要任何專門的解釋機制。此外,也避免了準虛擬化(paravirtualization)和系統調用替換中的復雜性。
liunux 容器并不是一個全新的概念,早期的容器技術有 chroot、Solaris Containers、FreeBSD jail、linux-VServer、Solaris Zones、OpenVZ、lxc 等。雖然這些技術發展很早,但是并沒有集成到 linux 內核中去,使用起來很不方便,比如 OpenVZ 需要先給操作系統打上特定的內盒補丁才能使用。LXC 項目借鑒了前人成熟的容器設計理念,并給予一系列新的內核特性實現了更具擴展性的虛擬化容器方案,并且被集成到了主流 linux 內核中,進而成為 linux 系統輕量級容器技術的事實標準。
在 LXC 的基礎上,docker 做了很大的改善,比如:
1、LXC 的定位是作為一種虛擬機的替代方案。雖然所有的軟件都可以安裝在由 LXC 或者 Docker 管理的容器中,但是 Docker 更傾向于在一個容器中運行一個應用
2、每個 LXC 容器之間或許不兼容,但是 docker 采用了一種標準的配置方法使得由不同 docker 創建出的 LXC 能夠完全兼容
3、Docker 實現了類似 git 的容器版本管理方法,并且能夠進行增量更新。
4、可以創建 base image 并將其保存在遠程倉庫 (repository) 中以便復用,其他容器可以在其基礎上進行創建并保存為新的 image。
5、docker 提供了各種容器管理工具(如分發、版本、移植等)讓用戶無需關注底層的操作,可以簡單明了地管理和使用容器
6、Docker 管理著一個公共的 image 庫方便用戶分享自己的 image,同時公司也可以構造自己私有的 image 庫。
7、Docker 的容器是根據 Dockerfile 構建的,你可以在構建 image 的過程中,根據需要運行任何命令和程序。
8、因為 docker 越來越流行,有大量的方法能夠將其輕易地集成到開發過程中,比如可以采用統一的方法來構造用于持續集成的環境和開發環境的容器。
Docker 與虛擬機的區別
其實,docker 和虛擬機都是屬于虛擬化技術。而虛擬化技術又分了很多種類。比如 VM、KVM 這種全虛擬化和早期的 Xen 這種半虛擬化。而 docker 則是屬于操作系統級虛擬化。
像 VM、KVM 之類的虛擬出來的都是虛擬機,而 docker 作為一種輕量級的虛擬化方式,那么 docker 在運行應用上跟傳統的虛擬機方式有哪些顯著優勢呢?
1、docker 容器很快,啟動和停止可以在秒級實現,這相比傳統的虛擬機方式要快的很多
2、docker 容器對系統資源需求很少,一臺主機上可以同時運行數千個 docker 容器
3、docker 通過類似 git 的操作來方便用戶獲取、分發和更新應用鏡像,指令簡明,學習成本很低
4、docker 通過 dockerfile 配置文件來支持靈活的自動化創建和部署機制,提高工作效率
下面是 docker 容器技術和傳統虛擬機技術的特性比較:
特性容器虛擬機啟動速度秒級分鐘級硬盤使用一般為 MB 一般為 GB 性能接近原生弱于
系統支持量單機支持上千個容器一般幾十個隔離性安全隔離安全隔離
docker 的這些優勢是什么造成的呢?我們可以先看下圖:
傳統虛擬化是在硬件層面實現虛擬化,需要有額外的虛擬機管理應用和虛擬機操作系統層,而 docker 容器卻不需要這兩層,而是直接使用操作系統的系統調用接口。正因為這樣子,docker 容器除了運行其中的應用之外,基本不消耗額外的系統資源,保證應用性能的同時,盡量減小系統開銷。傳統虛擬機方式,運行 N 個不同的應用就要啟動 N 個虛擬機(每個虛擬機需要單獨分配內存、磁盤等資源),而 docker 只需要啟動 N 個隔離的容器,并將應用放到容器中即可,這樣子就減少了很多的資源消耗。
docker 在軟件開發流程中的優勢
docker 在設計之初就有以下幾個目的:
1、加強開發人員寫代碼的開發環境和應用程序要部署的生產環境的一致性,從而降低那種 開發一切正常,肯定是運維的問題 的風險。
2、縮短代碼從開發、測試到部署、上線運行的周期,讓你的程序具備可以執行,易于構建、并易于協作
3、docker 鼓勵面向服務的架構和微服務架構。docker 推薦單個容器運行一個應用程序或進程,這樣就形成了一個分布式的應用程序模型
使用 docker,開發人員只需要關心容器中運行的應用程序,而運維人員只需要關心如何管理容器。
總體來講,docker 在開發和運維過程中,具有如下優勢:
1、更快速的交付和部署
2、更高效的資源利用。docker 容器的運行不需要額外的虛擬機管理程序(VMM,以及 Hypervisor)支持,它是內核級的虛擬化,可以實現更高的性能,同時對資源的需求很低
3、更輕松的遷移和擴展
4、更簡單的更新管理。使用 dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作,并且所有修改都以增量的方式進行分發和更新,從而實現自動化并且高效的容器管理。
到此,關于“docker 與傳統虛擬化的區別是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!