精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

當前位置:云計算技術專區 → 正文

Docker的價值和應用場景分析

責任編輯:editor005 作者:tomzhou |來源:企業網D1Net  2015-08-03 14:13:13 本文摘自:運維幫微信號

近年來,Docker在IT界可謂風光十足,各大技術論壇上賺足了眼球,公司內外也有相當多的介紹和嘗試,看上去如此高大上的技術,貌似會給云、服務部署、運維等領域帶來顛覆性的創新。

近期查閱了一些文檔,較深入的了解Docker的技術細節,發現Docker確實在解決部分需求時恰到好處,但也絕對不是無所不能的萬金油。

一、什么是Docker

官方定義:

Develop, Ship and Run Any Application, Anywhere

Docker is a platform for developers and sysadmins to develop, ship, and run applications. Docker lets you quickly assemble applications from components and eliminates the friction that can come when shipping code. Docker lets you get your code tested and deployed into production as fast as possible.

解讀:

官方把Docker定義為應用打包、部署的平臺,而不是虛擬化技術;

Docker本身并沒有革命性的創新,其核心是Container,Container是很多年前就提出來的理念,并且在Linux、Unix、 FreeBSD上都有技術實現,Linux成熟的方案是lxc;

Docker是一個基于lxc(linux container),以及cgroup的上層工具,通過對lxc,cgroup及相關系統命令的封裝,使得用戶可以非常方便的使用Linux Container;

Docker Hub提供了應用包的版本管理和分發能力

二、Docker的價值及同類技術對比

Container的核心價值在于隔離性和封裝性,在這兩方面也有較多類似解決方案,簡單分析和對比一下:

1. 隔離性

Docker的隔離性是通過Container來實現的,并且是基于Lxc;與此相對應的另外一個解決方案是虛擬化;兩者對比如下:

優點:

非常輕量

與創建或啟動一個虛擬機相比,Container可以認為沒啥開銷,約等于Linux下創建一個進程;

有個夸張的說法:單機可以輕易的啟動多達上千個Container,但基本不太可能啟動上千個虛擬機;

但這比較的前提是需要在單機上隔離1000個應用;如果只需隔離兩個應用,每個應用運行500個進程的話,對比應該是兩個Container與兩個VM;

缺點:

隔離層次高

docker在Linux kernel之上進行隔離,確切的講是進程間的隔離,這就決定了:

1)Docker只支持64位Linux,必然不支持windows, unix, bsd...,而虛擬化可支持所有主流操作系統;

2)Docker隔離在kernel之上,并且本身依賴于kernel的特性,所以只能模擬出高版本的Linux發行版;必然找不到ubuntu 9.04這樣的image;

3) Container使用的Kernel與主機的Kernel是一致的,無法定制Container的內核;

硬件資源度量和配額能力

通過cgroup,Docker具備一定的能力控制Container的資源使用,但在網絡、磁盤、CPU的使用上,度量和隔離能力還沒有VM成熟;

此外,從用戶角度來看,VM可以做到非常透明,可以直接理解為一臺主機;但Container在網絡連接、數據存儲方面都需要經過特殊處理;

所以,與虛擬化相比,從隔離性上看,Docker的優勢在于性能損耗低,劣勢在于隔離層次比較高;

如果你的需求在是單機上進行盡可能多的隔離,那Docker是首選;

如果你的需求是盡可能徹底的隔離,對硬件資源精準控制且可度量,同時對隔離份數要求不多的話,那虛擬化是首選;

2. 封裝性

從Docker的Logo以及官方的定義來看,它的主要能力并不在隔離性,而在于封裝性,也就是應用的打包、部署、運行;

在封裝方面的優勢,主要體現在:

封裝大小

與VM相比,Docker的image確實很小,官方的Centos image大概只有220M(被精減成最基本的Centos了,連ifconfig命令都沒有,安裝完常用工具,你會發現也不小了);

可對應用高度定制和封裝

可通過Dockerfile定義應用包,Image內的部署可高度定制和封裝,對外接口收斂且清晰;使用者無需關注細節;

Image倉庫及版本管理

非常成熟的公共和私有倉庫搭建和使用,以及版本管理,并可通地倉庫很容易的進行共享、分發、部署;

應用和運行分離

我們所看到的Image是靜止的,只讀的;將image運行起來后是Container了,在運行時的修改,只影響當前Container,不影響Image;

從上面可以看出,與VM Image的部署能力相比,Docker設計理念先進,優勢明顯,而且幾乎沒有啥缺點。

但從封裝部署角度來看,Docker的競品應該不是VM,而是RPM+YUM,DEB+APT這樣的組合。

你會發現,與這兩組合相比,能力出奇的相似了,但還是有些區別:

封裝能力:

Docker的Image,可以輕易實現在Centos上面跑Ubuntu,而且非常輕量,這個是Rpm,Deb不具備的;

這個在一些測試、學習、或小規模的Paas場景下,是非常有價值的;

但任何較大規模的應用,我想不太可能出現這樣的部署;

封裝粒度及依賴管理:

Docker自kernel之上,全打包在一塊了,里面包含了Linux用戶環境、系統類庫、應用程序;可以理解為,一個Docker Image的外部依賴只有Linux Kernel了;從另外一方面看,極大提升了移植能力;

Rpm、Deb的打包粒度比Docker更細,只打包單個應用自身,外部依賴通過只記錄并不存儲在包內,通過apt,yum這樣的輔助工具也非常容易解決外部依賴;這樣做的好處在于更輕量,理論上包大小肯定小于Docker;在大規模業務部署下,上千臺設備發布20M的RPM,與發布200M的Docker image,效率上的差距應該還是比較大的;

實際應用當中,在解決外部依賴問題上,C/C++程序還可以簡單的通過靜態鏈接來實現;Java/PHP/GoLang這類程序基本不存在系統類庫的依賴,跨平臺的能力也勝過Docker本身;

跨平臺:

在各大Linux發行版下,你都可以按相同的方式使用Docker來管理打包及部署;但Rpm,Deb都有自己的粉絲和發行版本,在發行版間不通用;

但Docker自身的學習和部署成本,要高于Rpm,Deb;

所以,從封裝性看,Docker遠勝于VM,與Rpm+Yum&Deb+Apt能力相當,從用戶角度來看是多了一個選擇;

拋開隔離性,假設你需要在單機上運行一個MySQL,你是希望安裝Docker、再用Docker來部署MySQL?還是直接yum install mysql?

綜合來看,Docker的核心價值就在于隔離性和封裝性,并在兩者間有個很好的平衡和兼顧,可預見的是在小規模的Paas領域是最好的解決方案。

三、Docker在公司內應用的思考

前面講到Docker的核心價值在于隔離性和封裝性,討論Docker在公司內業務的應用也應該從這兩個方面來看。

哪些場景可以用到隔離性:

研發測試流程,單機多版本并行部署和運行;

公司內部的類Paas服務,比如TDW計算、藍鯨;

海量服務的正式環境,基本單個服務就能跑滿單機,可以說完全沒有隔離性需求;

哪些場景用到封裝性:

公司所有業務都需要打包部署,但各大業務都已經有非常成熟的包發布系統;整合研發、編譯、測試、發布以及架構、配置、路由等各方面的能力;推倒現有包發布系統,基于Docker重構的話,開發和用戶學習成本相當高,但技術上并沒有明顯價值。

如果是全新開發的技術框架和運維體系的話,Docker會是一個較好的選擇,但個人更傾向于Centos+Yum+RPM的組合。

四、其它

IT技術日新月異,新技術和組件層出不窮,類似Docker之類的使用勢必要求基礎運營環境與業界保持同步更新。

為了能保持與業界同步,技術團隊仍需花費巨大精力投入到無任何業務產出的工作當中。

關鍵字:dockerfile進程間

本文摘自:運維幫微信號

x Docker的價值和應用場景分析 掃一掃
分享本文到朋友圈
當前位置:云計算技術專區 → 正文

Docker的價值和應用場景分析

責任編輯:editor005 作者:tomzhou |來源:企業網D1Net  2015-08-03 14:13:13 本文摘自:運維幫微信號

近年來,Docker在IT界可謂風光十足,各大技術論壇上賺足了眼球,公司內外也有相當多的介紹和嘗試,看上去如此高大上的技術,貌似會給云、服務部署、運維等領域帶來顛覆性的創新。

近期查閱了一些文檔,較深入的了解Docker的技術細節,發現Docker確實在解決部分需求時恰到好處,但也絕對不是無所不能的萬金油。

一、什么是Docker

官方定義:

Develop, Ship and Run Any Application, Anywhere

Docker is a platform for developers and sysadmins to develop, ship, and run applications. Docker lets you quickly assemble applications from components and eliminates the friction that can come when shipping code. Docker lets you get your code tested and deployed into production as fast as possible.

解讀:

官方把Docker定義為應用打包、部署的平臺,而不是虛擬化技術;

Docker本身并沒有革命性的創新,其核心是Container,Container是很多年前就提出來的理念,并且在Linux、Unix、 FreeBSD上都有技術實現,Linux成熟的方案是lxc;

Docker是一個基于lxc(linux container),以及cgroup的上層工具,通過對lxc,cgroup及相關系統命令的封裝,使得用戶可以非常方便的使用Linux Container;

Docker Hub提供了應用包的版本管理和分發能力

二、Docker的價值及同類技術對比

Container的核心價值在于隔離性和封裝性,在這兩方面也有較多類似解決方案,簡單分析和對比一下:

1. 隔離性

Docker的隔離性是通過Container來實現的,并且是基于Lxc;與此相對應的另外一個解決方案是虛擬化;兩者對比如下:

優點:

非常輕量

與創建或啟動一個虛擬機相比,Container可以認為沒啥開銷,約等于Linux下創建一個進程;

有個夸張的說法:單機可以輕易的啟動多達上千個Container,但基本不太可能啟動上千個虛擬機;

但這比較的前提是需要在單機上隔離1000個應用;如果只需隔離兩個應用,每個應用運行500個進程的話,對比應該是兩個Container與兩個VM;

缺點:

隔離層次高

docker在Linux kernel之上進行隔離,確切的講是進程間的隔離,這就決定了:

1)Docker只支持64位Linux,必然不支持windows, unix, bsd...,而虛擬化可支持所有主流操作系統;

2)Docker隔離在kernel之上,并且本身依賴于kernel的特性,所以只能模擬出高版本的Linux發行版;必然找不到ubuntu 9.04這樣的image;

3) Container使用的Kernel與主機的Kernel是一致的,無法定制Container的內核;

硬件資源度量和配額能力

通過cgroup,Docker具備一定的能力控制Container的資源使用,但在網絡、磁盤、CPU的使用上,度量和隔離能力還沒有VM成熟;

此外,從用戶角度來看,VM可以做到非常透明,可以直接理解為一臺主機;但Container在網絡連接、數據存儲方面都需要經過特殊處理;

所以,與虛擬化相比,從隔離性上看,Docker的優勢在于性能損耗低,劣勢在于隔離層次比較高;

如果你的需求在是單機上進行盡可能多的隔離,那Docker是首選;

如果你的需求是盡可能徹底的隔離,對硬件資源精準控制且可度量,同時對隔離份數要求不多的話,那虛擬化是首選;

2. 封裝性

從Docker的Logo以及官方的定義來看,它的主要能力并不在隔離性,而在于封裝性,也就是應用的打包、部署、運行;

在封裝方面的優勢,主要體現在:

封裝大小

與VM相比,Docker的image確實很小,官方的Centos image大概只有220M(被精減成最基本的Centos了,連ifconfig命令都沒有,安裝完常用工具,你會發現也不小了);

可對應用高度定制和封裝

可通過Dockerfile定義應用包,Image內的部署可高度定制和封裝,對外接口收斂且清晰;使用者無需關注細節;

Image倉庫及版本管理

非常成熟的公共和私有倉庫搭建和使用,以及版本管理,并可通地倉庫很容易的進行共享、分發、部署;

應用和運行分離

我們所看到的Image是靜止的,只讀的;將image運行起來后是Container了,在運行時的修改,只影響當前Container,不影響Image;

從上面可以看出,與VM Image的部署能力相比,Docker設計理念先進,優勢明顯,而且幾乎沒有啥缺點。

但從封裝部署角度來看,Docker的競品應該不是VM,而是RPM+YUM,DEB+APT這樣的組合。

你會發現,與這兩組合相比,能力出奇的相似了,但還是有些區別:

封裝能力:

Docker的Image,可以輕易實現在Centos上面跑Ubuntu,而且非常輕量,這個是Rpm,Deb不具備的;

這個在一些測試、學習、或小規模的Paas場景下,是非常有價值的;

但任何較大規模的應用,我想不太可能出現這樣的部署;

封裝粒度及依賴管理:

Docker自kernel之上,全打包在一塊了,里面包含了Linux用戶環境、系統類庫、應用程序;可以理解為,一個Docker Image的外部依賴只有Linux Kernel了;從另外一方面看,極大提升了移植能力;

Rpm、Deb的打包粒度比Docker更細,只打包單個應用自身,外部依賴通過只記錄并不存儲在包內,通過apt,yum這樣的輔助工具也非常容易解決外部依賴;這樣做的好處在于更輕量,理論上包大小肯定小于Docker;在大規模業務部署下,上千臺設備發布20M的RPM,與發布200M的Docker image,效率上的差距應該還是比較大的;

實際應用當中,在解決外部依賴問題上,C/C++程序還可以簡單的通過靜態鏈接來實現;Java/PHP/GoLang這類程序基本不存在系統類庫的依賴,跨平臺的能力也勝過Docker本身;

跨平臺:

在各大Linux發行版下,你都可以按相同的方式使用Docker來管理打包及部署;但Rpm,Deb都有自己的粉絲和發行版本,在發行版間不通用;

但Docker自身的學習和部署成本,要高于Rpm,Deb;

所以,從封裝性看,Docker遠勝于VM,與Rpm+Yum&Deb+Apt能力相當,從用戶角度來看是多了一個選擇;

拋開隔離性,假設你需要在單機上運行一個MySQL,你是希望安裝Docker、再用Docker來部署MySQL?還是直接yum install mysql?

綜合來看,Docker的核心價值就在于隔離性和封裝性,并在兩者間有個很好的平衡和兼顧,可預見的是在小規模的Paas領域是最好的解決方案。

三、Docker在公司內應用的思考

前面講到Docker的核心價值在于隔離性和封裝性,討論Docker在公司內業務的應用也應該從這兩個方面來看。

哪些場景可以用到隔離性:

研發測試流程,單機多版本并行部署和運行;

公司內部的類Paas服務,比如TDW計算、藍鯨;

海量服務的正式環境,基本單個服務就能跑滿單機,可以說完全沒有隔離性需求;

哪些場景用到封裝性:

公司所有業務都需要打包部署,但各大業務都已經有非常成熟的包發布系統;整合研發、編譯、測試、發布以及架構、配置、路由等各方面的能力;推倒現有包發布系統,基于Docker重構的話,開發和用戶學習成本相當高,但技術上并沒有明顯價值。

如果是全新開發的技術框架和運維體系的話,Docker會是一個較好的選擇,但個人更傾向于Centos+Yum+RPM的組合。

四、其它

IT技術日新月異,新技術和組件層出不窮,類似Docker之類的使用勢必要求基礎運營環境與業界保持同步更新。

為了能保持與業界同步,技術團隊仍需花費巨大精力投入到無任何業務產出的工作當中。

關鍵字:dockerfile進程間

本文摘自:運維幫微信號

電子周刊
回到頂部

關于我們聯系我們版權聲明隱私條款廣告服務友情鏈接投稿中心招賢納士

企業網版權所有 ©2010-2024 京ICP備09108050號-6 京公網安備 11010502049343號

^
  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 中牟县| 安多县| 肥东县| 车险| 仪征市| 南平市| 洪泽县| 盐城市| 富民县| 丹阳市| 丹江口市| 墨江| 盘山县| 岳西县| 分宜县| 新化县| 遂宁市| 米易县| 乌兰县| 油尖旺区| 安阳市| 南召县| 卢氏县| 扬中市| 喀喇| 龙门县| 于都县| 乌海市| 武陟县| 逊克县| 凌云县| 轮台县| 顺昌县| 桐柏县| 祥云县| 临洮县| 凤庆县| 巩义市| 五河县| 会宁县| 兴安县|