服務項目:網站建設、仿站、程序開發、APP開發設計、移動網站開發設計、企業網站設計、電子商務網站開發、網站維護、網站推廣、UX/UI 、HTML5、CSS3、JS / Jquery ...
          四川浚??萍加邢薰?></a></div>
                    <div   id=四川???萍加邢薰? title=
          四川???萍加邢薰?(開發設計官網)TEL : 15308000360 / QQ : 38585404
          深入挖掘用戶需求
          成就品質用戶體驗

          您的位置:首頁 > 技術經驗 > 網站運維 > 正文

          漫談Docker-云時代的程序分發方式
          技術支持服務電話:15308000360 【7x24提供運維服務,解決各類系統/軟硬件疑難技術問題】

          要說最近一年云計算業界有什么大事件?Google Compute Engine

          的正式發布?Azure入華?還是AWS落地中國?留在每個人大腦中的印象可能各不相同,但要是讓筆者來排名的話那么Docker絕對應該算是第一位的。如果你之前聽說過它的話,那么也許你會說“沒錯,就是它”,因為幾乎世界各地的開發、運維都在談論著Docker;如果你還沒聽說過Docker,那么我真的建議你花上10分鐘來閱讀本文。

          1. Docker簡介

          1.1. 什么是Docker?

          Docker是一個重新定義了程序開發測試、交付和部署過程的開放平臺。Docker也是容器技術的一種,它運行于Linux宿主機之上,每個運行的容器都是相互隔離的,也被稱為輕量級虛擬技術或容器型虛擬技術。而且它有點類似Java的編譯一次,到處運行,Docker則可以稱為構建一次,在各種平臺上運行,包括本地服務器和云主機等(Build once,run anywhere)。

          容器就是集裝箱,我們的代碼都被打包到集裝箱里;Docker就是搬運工,幫你把應用運輸到世界各地,而且是超高速。

          Docker是開源軟件,代碼托管在GitHub上,使用Go語言編寫。Go可以稱得上是互聯網時代專門為開發分布式、高并發系統而生的編程語言。Docker也可以說是Go語言的一個殺手級應用,而且在Docker生態圈里很多軟件也都是使用Go語言編寫的。

          1.2. Docker歷史

          Docker項目始于2013年3月,由當時的PaaS服務提供商dotCloud開發,dotClound也是YCombinator S10的畢業生。盡管Docker項目很年輕,到現在也只有15個月而已,然而它的發展勢頭如此之猛已經讓很多人感嘆不已了。

          2013年10月dotCloud公司名字也由dotCloud, Inc.改為Docker, Inc.,集中更多的精力放到了Docker相關的研發上。

          1.3. Docker的技術基石

          在進入Docker的世界之前,我們先來看一下Docker實現所依賴的一些技術。

          實際上Docker的出現離不開很多Linux kernel提供的功能,甚至可以說Docker在技術上并沒有什么特別重大的創新之處,利用的都是已經非常成熟的Linux技術而已,這些技術早在Solaris 10或Linux Kernel 2.6的時候就有了。可以毫不夸張的說Docker就是“站在了巨人的肩膀上”。

          下面我們就先來了解一下Docker主要利用的Linux技術。

          1.3.1. 容器技術

          容器(Container)有時候也被稱為操作系統級虛擬化,以區別傳統的Hypervisor虛擬技術。它不對硬件進行模擬,只是作為普通進程運行于宿主機的內核之上。

          在容器中運行的一般都是一個簡易版的Linux系統,有root用戶權限、init系統(采用LXC容器的情況下)、進程id、用戶id以及網絡屬性。

          容器技術在云計算時代已經被大量使用。Google公司的Joe Beda在今年5月做了一次題為《Containers At Scale — At Google, the Google Cloud Platform and Beyond》注 1的演講,在其中提到“Everything at Google runs in a container”,每周啟動容器次數竟然多達20億次。

          注 1 https://speakerdeck.com/jbeda/containers-at-scale

          很多PaaS平臺都是基于容器技術實現的,比如目前最成功的PaaS平臺Heroku。此外,還有比較著名的開源PaaS平臺Cloud Foundry的Warden以及Google的Lmctfy(Let Me Contain That For You)注 2等。

          注 2 Let Me Contain That For You,http://github.com/google/lmctfy

          1.3.2. LXC

          這也是在Linux下使用比較廣泛的容器方案?;旧衔覀兛梢哉J為Linux containers = cgroups(資源控制) + namespaces(容器隔離)。

          LXC很成熟很強大,然而它卻不好使用,比如它不方便在多臺機器間移動,不方便創建管理,不可重復操作,也不方便共享等等,相對于開發人員來說,它只是系統管理員的玩具。Docker的出現很好的解決了這些問題,它將容器技術的使用成本拉低到了一個平民價格。

          1.3.3. namespaces

          這是用來為容器提供進程隔離的技術,每個容器都有自己的命名空間,比如pid/net/ipc/mnt/uts等命名空間,以及為容器提供不同的hostname。namespace能保證不同的容器之間不會相互影響,每個容器都像是一個獨立運行著的OS一樣。

          1.3.4. cgroups

          cgroups是一個Google貢獻的項目,它主要用來對共享資源的分配、限制、審計及管理,比如它可以為每個容器分配CPU、內存以及blkio等的使用限額等。cgroups使得容器能在宿主機上能友好的相處,并公平的分配資源以及杜絕資源濫用的潛在風險。

          容器技術實現方案可以用下面的圖進行簡單說明。

          圖 Docker如何和Linux內核打交道
          圖1 Docker如何和Linux內核打交道

          上圖中的cgroups、namespaces和apparmor等都是Linux內核提供的功能。不管是傳統的LXC還是Docker的libcontainer,都使用了Kernel的這些功能來實現容器功能。

          1.3.5. 聯合文件系統

          聯合文件系統是一個分層的輕量、高性能文件系統。Docker之所以這么吸引人,很大程度上在于其在鏡像管理上所做出的創新。而聯合文件系統正是構建Docker鏡像的基礎。

          AUFS(AnotherUnionFS)是一個分層的基于Copy On Write技術的文件系統,支持Union Mount,就是將具有不同文件夾結構的鏡像層進行疊加掛載,讓它們看上去就像是一個文件系統那樣。

          1.4. 容器技術VS虛擬機技術

          容器技術和Hypervisor技術雖然不屬于同一層次的概念,但是作為具有計算能力的應用運行載體來說,它們還是有一定的共通性和競爭關系,這里作此對比完全是為了加深讀者對容器技術的理解而已。

            容器技術 虛擬機技術
          占用磁盤空間 小,甚至幾十KB(鏡像層的情況) 非常大,上GB
          啟動速度 快,幾秒鐘 慢,幾分鐘
          運行形態 直接運行于宿主機的內核上,不同容器共享同一個Linux內核 運行于Hypervisior上
          并發性 一臺宿主機可以啟動成千上百個容器 最多幾十個虛擬機
          性能 接近宿主機本地進程 遜于宿主機
          資源利用率

          比如開源PaaS實現軟件tsuru最初使用的是基于虛擬機的技術,創建一個應用程序需要5分鐘左右的時間,而在采用Docker之后,已經將這個時間縮短到了10秒鐘了注 3。

          注 3 tsuru and docker by Andrews Medina https://speakerdeck.com/andrewsmedina/tsuru-and-docker

          1.5. 我們能用Docker干什么?

          Docker可以應用在各種場景下,比如公司內部開發測試使用,或者作為共有或者私有PaaS平臺等。

          現在PaaS平臺的發展已經非常成熟了,這里我們只羅列一些在開發中使用Docker技術可能會給我們帶來的益處。

          1.5.1 在開發中

          構建開發環境變得簡單

          簡單包括幾個方面的意思

          • 快速:只需docker run即可
          • 共享:通過Dockerfile或者Registry
          • 自動化:一切代碼化的東西都可以自動化
          • 統一:每個人的開發環境都是一模一樣的

          設想我們要基于Nginx/PHP、MySQL和Redis開發,我們可以創建3個Docker鏡像保存到公司私有的Registry中去,每個開發人員使用的時候是需要執行docker run redis即可以享用自己獨有的Redis服務了,而且這3個容器不管從占用磁盤空間還是運行性能來說,都比虛擬機要好很多。

          1.5.2. 在測試中

          解決環境構建問題

          有時候構建測試的環境是一項費時費力的工作,而Docker能讓這變得輕松。如果你的測試比較簡單的話,甚至直接拿開發構建的鏡像就可以開始了。

          消除環境不一致導致的問題

          “在我的機器上運行的好好的,怎么到你那里就不行了?”,我想超過半數的程序員都曾經說過類似的話。如果對導致這一問題的原因進行統計的話,我想排在第一位的應該非“環境不一致”莫屬了,這包括操作系統和軟件的版本、環境變量、文件路徑等。

          使用Docker的話你再也不用為此煩惱了。因為你交付的東西不光是你的代碼、配置文件、數據庫定義,還包括你的應用程序運行的環境:OS加上各種中間件、類庫 + 你的應用程序。

          1.5.3. 部署和運維

          基于容器的部署和自動化

          Docker定義了重新打包程序的方法。

          Docker容器 + 用戶應用 = 部署單位(構件)

          Docker可以看作是用代碼編寫出來的國際集裝箱,它可以把任何應用及相關依賴項打包成一個輕量、可移植(Portable)、自包涵的容器。

          以前部署代碼都是代碼級別的,有了Docker,則可以進行容器級別的部署。這樣帶來的最大的好處就是開發者本地測試、CI服務器測試、測試人員測試,以及生產環境運行的都可以是同一個Docker鏡像。

          快速進行橫向擴展

          Docker容器的啟動速度很快,可以瞬間啟動大量容器,所以在非常適合在業務高峰期進行橫向擴展。這比傳統的啟動EC2實例或者物理機可要快多了。

          天生的和云計算技術相結合

          當然,由于Docker具有很好的移植性,所以它更強大的地方還在于和云環境結合使用。

          Docker容器是可移植,或者說跨平臺。將來的應用部署可能是在本地進行打包(成Docker鏡像)然后傳送到云端運行,至于是AWS還是GCE這不是問題,Docker都能在其上運行。這樣不僅能在一定程度上解決vendor-lockin的問題,同時也使得在不同的云服務提供商之間遷移也變得簡單。尤其是未來在使用多云(multi-cloud)環境的時候,這將非常便利。

          筆者認為基于IaaS + 容器技術的應用交付、部署方式將來一定會成為一種流行的方式。

          進行Blue-green部署


          「Blue-green deployment」這個詞最初出現在《Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation 》一書,后經ThoughtWorks的Martin Fowler發揚光大注 4。



          上一篇:億級Web系統搭建—單機到分布式集群
          下一篇:重新思考數據中心網絡

          相關熱詞搜索:docker 分發方式
          主站蜘蛛池模板: 男人猛躁进女人免费观看| 亚洲色欲色欲www| 日本护士XXXXHD少妇| 国产精品午夜福利在线观看地址| 久久99精品久久只有精品| 欧美高清免费一级在线| 国产igao为爱做激情| 香蕉伊思人在线精品| 妇女bbbb插插插视频| 久久国产欧美日韩精品| 欧美精品综合一区二区三区 | 久久精品亚洲一区二区三区浴池| 正在播放pppd| 制服丝袜中文字幕在线观看 | 久久一区二区三区99| 欧美国产一区二区三区激情无套| 免费人成在线观看视频高潮 | 天堂草原电视剧在线观看免费| 久久久国产99久久国产久| 欧美夫妇交换俱乐部在线观看| 免费福利在线观看| 色婷婷综合久久久久中文字幕| 国产男人的天堂| 91香蕉短视频| 婷婷五月综合激情| 丰满人妻熟妇乱又伦精品软件| 日韩精品无码专区免费播放| 亚洲成aⅴ人在线观看| 狠色狠色狠狠色综合久久| 97久久香蕉国产线看观看 | 激情综合色综合久久综合| 四虎在线精品观看免费| 黑猫福利精品第一视频| 国产精品无码免费播放| a视频免费观看| 成人毛片18女人毛片免费| 久久福利资源网站免费看| 欧美国产日本高清不卡| 亚洲精品视频在线观看你懂的| 精品国产一区二区三区免费看| 国产一级二级在线观看|