安基網 首頁 系統 網絡學院 查看內容

工作總結:一文了解Docker 容器和VM的區別

2019-12-4 13:01| 投稿: xiaotiger |來自: 互聯網


免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!

摘要: 本文嘗試解釋兩者的不同,不涉及底層知識。相當于科普小知識。Docker Container一個謹慎的比較docker和vm,個人覺得Container像個一個迷你的vm從某種意義上說,這是正確的。但從另一個角度來看,這是非常不準確的, ...
本文嘗試解釋兩者的不同,不涉及底層知識。相當于科普小知識。

Docker Container

一個謹慎的比較docker和vm,個人覺得Container像個一個迷你的vm

從某種意義上說,這是正確的。但從另一個角度來看,這是非常不準確的,可能會讓讀者導致混亂,錯誤的假設。

需要理解的重要相似之處是,這兩種方法都是為部署和運行應用程序創建隔離環境的方法。

Virtual Machines

VM(VMware)在宿主機器、宿主機器操作系統的基礎上創建虛擬層、虛擬化的操作系統、虛擬化的倉庫,然后再安裝應用;

Containers

容器完全在容器主機的應用程序層中運行。在UserLAnd[1]中,OSs有內核空間,操作系統的核心在其中運行。然后是用戶空間,所有與用戶活動相關的東西都在這里運行。沒有安裝操作系統。容器共享主機的內核空間,類似于主機中的一個用戶,LXC所實現的隔離性主要是來自kernel的namespace, 其中pid, net, ipc, mnt, uts 等namespace將container的進程, 網絡, 消息, 文件系統和hostname 隔離開。但是,cgroup的隔離性要比kvm粒度大,并且很難metric指標。比如,磁盤的IO就很難隔離。導致一個容器的io增大,這個主機都有可能hang。

容器實際上就是一個進程。當它在容器內時,感覺就像一臺完全獨立的機器。我們可以啟動新的進程,當監控這些進程時,您將只看到容器內的進程。但是,如果您監控主機進程,仍然能夠看到容器中運行的所有內容。

容器共享主機。那么他是如何在同一臺機器上運行Ubuntu和CentOS呢?

因為容器實際上共享主機的內核。特定的Linux發行版都構建在同一個內核之上(盡管版本不同)。所有的包管理器、UI之類的東西,以及其他各種軟件,都可以在用戶空間中運行,這些軟件使發行版獨一無二,并創造出不同的Linux風格。具有不同發行版的不同容器可以在同一臺機器上運行而不會產生沖突。

當涉及到平臺設計時,這個內核共享事實還有其他重要的含義。例如,Windows容器將不能在Linux主機上運行。

不可修改

容器本質上是不可變的。 容器操作系統、庫、實用程序和應用程序在構建時都是凍結的,在此之后它就不能更改了。所以,不需要以傳統的方式更新容器。重新構建和重新部署。雖然有一些缺點,但是在可重復性、簡化部署和可靠性方面有很大的提高。

鏡像(image)

鏡像其實是一個標準的文件包,它表示容器運行時文件系統的狀態。這可以發布到注冊表,也可以用作父鏡像。

大多數鏡像將構建在父鏡像之上(父鏡像通常也構建在另一個鏡像像之上);居诚駴]有父鏡像的。

下面是一個完整的ubuntu鏡像[2]

小結

簡而言之,容器化為單個OS上的工作負載隔離提供了標準化的方法,而虛擬化為在一臺服務器上安裝多個OSs提供了標準化的方法。它們在業界都很突出,在云計算中經常一起使用。

因為容器沒有安裝完整的操作系統,所以它的重量更輕,因為下載和運行更快,存儲更小。

舉例對比兩者的不同

下圖以盡可能簡單的方式說明了上述差異。請注意使用VMs和容器運行相同的兩個工作負載的堆棧組合。

如果大家理解了上面描述的容器和vm之間的關鍵區別,那么第二個圖將提供對正在發生的事情的更深入的信息。大家可以清楚地看到這兩種技術如何提供工作負載隔離。

記住,堆棧表示邏輯層次結構。我們知道這些容器都在主機操作系統上作為唯一的進程運行,而VM客戶操作系統是成熟的操作系統,可以管理它們自己的進程。

現在,讓我們看看vm和容器通常是如何一起使用的。假設我們想在云中運行Python Flask應用程序和Java Spring應用程序。下圖描述了AWS上可行的狀態。

Amazon EC2是Amazon的托管計算服務。這意味著用戶不需要擔心服務器或管理程序。我們只需選擇實例類型(針對不同工作負載的不同特性)并部署VM。(國內的同學們還是使用阿里云吧)

有許多不同的Amazon機器鏡像可供選擇[3],或者可以創建自己的鏡像。因為vm比容器更重。

我們可以在許多不同的服務中共同使用VM鏡像?梢詫⒒静僮飨到y、包更新、一些腳本、監視代理的安裝和配置,以及其他操作和安全工具打包到vm中。

通常使用配置管理工具(如Ansible或Chef)來管理工作負載或服務。Chef已經是devops的標準管理工具。

容器編排

下一個例子提供了一個非;镜募軜媹D,了解在云中運行容器的基本原理。

容器編排工具用于在平臺上管理容器,在這個平臺上,讓我們感覺就像是在處理一臺機器一樣透明。這是通過巧妙地管理集群(云中的機器或vm集群)來實現的。它們可以通過自動化資源調度、擴展和工作負載管理功能來擴展容器的優點。Kubernetes是目前最流行的容器編排平臺。

這些工具在體系結構上很復雜,很難配置和讓他們良好的運行(坑還是比較多的)。但從用戶的角度來看,它們非常棒,而且隨著知識的增長、反饋的實現和托管服務的出現,它們越來越容易管理。

最后,我們希望獲取Python容器并在本地機器上運行它。 它們允許我們相對容易地在機器上運行與生產中完全相同的內容。

Docker是一個本質上Linux應用程序。不過,Docker提供了易于使用的特點,可以在后臺處理VM的運行 。上面顯示了在Mac上部署docker應用程序的邏輯架構。

阿里的數據庫基本都已經做到了docker化,這其中在存儲、網絡、數據庫和docker本身都做了大量的優化。要想把整體服務docker化在技術上來講還是很難的。會用和用好難度是不一樣的。

[1]:https://play.google.com/store/apps/details?id=tech.ula&hl=en_US 需要翻墻

[2]:https://github.com/tianon/docker-brew-ubuntu-core/blob/9db8c72dd02e8f9fd5dba82ff9266174b088e2e6/bionic/Dockerfile?source=post_page-----94c558905b6----------------------

[3]:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html



小編推薦:欲學習電腦技術、系統維護、網絡管理、編程開發和安全攻防等高端IT技術,請 點擊這里 注冊賬號,公開課頻道價值萬元IT培訓教程免費學,讓您少走彎路、事半功倍,好工作升職加薪!

本文出自:https://www.toutiao.com/a6735318910221959692/

免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!


鮮花

握手

雷人

路過

雞蛋

相關閱讀

最新評論

 最新
返回頂部
洗衣店赚钱联系澳洁 微信股票群二维码大 双色球关系码怎么算 微乐山东麻将有没有挂 三维股份股票最新公 今天快乐扑克的开奖 浙江20选5中奖号码 网络项目博客 麻将连连看免费下载 股票开盘交易时间 36选7彩票走势图