Docker大行其道—初識
導讀 | 隨著分散式、雲端計算、大資料的火熱爆發,大量的雲端計算叢集出現,光憑計算機硬體配置的已經無法再次一較高下,虛擬化成為其中最核心的技術。虛擬化既可以透過硬體模擬,也可以透過作業系統層面去實現,近年來熱火朝天的容器輕量級虛擬化,保留了作業系統本身的機制和特性,而Docker在此脫穎而出。 |
Docker是基於Go語言實現的雲開源專案,目前歸於Apache基金會並遵循Apache 2.0協議。誕生於2013年初,前身公司為dotCloud,docker開源後得到受到社會廣泛的關注,docker的生態圈體系也逐漸成熟,這家公司也改名為Docker Inc,專注於Docker相關技術和產品開發。
Docker最大的目標是:“Build, Ship and Run Any App, Anywhere!”。你只需要透過對應用元件的一次的封裝,就能在任意地點構建和執行你的應用。無論是一個完整的應用,或者是某些微服務,甚至到一個完整的作業系統都能成為docker的應用元件。Docker提供一個高效、敏捷和輕量的容器方案,能動態適應各種規模的系統部署需求。
Docker整個生命週期包含三部分:映象(Image),容器(Container),倉庫(Repository)。映象和容器的關係就像程式和程式,映象是容器執行的一大前提,而容器則是映象的一個執行例項。倉庫則是映象的管理中心,預設的映象倉庫為Docker Hub。
Docker執行容器前需要檢查本地是否存在對應的映象,如果不存在,會嘗試從預設的映象倉庫下載。映象例項化之後執行著一個完整的容器,容器除了映象本身的內容外,還提供額外的可寫檔案層以及相對獨立的執行環境(可能是一些應用或者服務,也可能是完整的作業系統)。
作為一個C/S模型的專案,Docker透過Docker Host進行映象、容器、守護程式、分割槽等的管理,同時在Docker Client進行映象的拉取,容器的構建等操作,通常情況下Host和Client可能會在同一臺機器上。
Docker開原始碼地址:
假如當前有這麼一個場景:“由於業務增長,公司的一個網站專案需要遷移到新的伺服器”。按照傳統方案,我們很可能需要作一些重複性的工作。首先需要在新的伺服器上安裝對應的執行環境以及對應的依賴,如LAMP( +Apache+Mysql+PHP),建立對應的使用者或組並進行檔案許可權的管理,耗費大量的精力後,還需要對該環境進行測試,最後才能部署上線。試想一下,如果這樣的需求多少十幾倍,這些工作需要重複的執行。
也許你會說可以透過虛擬化的技術將整個環境打包成映象再進行部署,加入新的伺服器本身也是一臺虛擬化的機器,再加上一層xen(或者其他虛擬機器)去部署顯然顯得多餘了。
而Docker提供一種極為簡便的操作方式,透過容器來進行應用打包,我們可以透過封裝成映象或是編寫Dockerfile等方式來進行打包,這意味著在新的伺服器上只需要啟動所需要的容器即可。一來節省了大量的時間投入,而來降低了部署過程出現問題帶來的隱患。
1. 極速交付和部署
使用docker,開發人員可以使用映象快速構建一套標準的開發環境。之後的測試和上線環節完全可以複用這套映象將應用部署到測試環境或生產環境等任意地方。Docker可以快速建立、刪除容器,並保留了每一個步驟的配置和操作過程,降低開發、測試、部署的時間的同時讓環境部署更容易被理解。透過簡單的配置檔案修改,就能輕鬆完成一次執行環境的迭代,所有操作都可以以增量的形式進行分發和更新,從而實現自動化和高效的容器管理。
2. 效能損耗低
事實上docker是核心級別的虛擬化,不需要額外的虛擬化管理程式,因此開啟docker對效能的損耗幾乎忽略不計。
3. 輕便易遷移擴充
Docker幾乎支援任意平臺執行,無論是物理機還是虛擬化的主機,甚至個人電腦都能相容執行docker,這種相容性可以讓應用更方便切換執行平臺。
4. 規範化的標準
Docker背後的標準化容器執行引擎 - runC。runC是由docker貢獻後續完善的一個開放的工業化標準,其主要內容:
- 操作標準化:容器的標準化操作包括使用標準容器感覺建立、啟動、停止容器,使用標準檔案系統工具複製和建立容器快照,使用標準化網路工具進行下載和上傳。
- 內容無關:內容無關指不管針對的具體容器內容是什麼,容器標準操作執行後都能產生同樣的效果。如容器可以用同樣的方式上傳、啟動,不管是php應用還是mysql資料庫服務。
- 基礎設施無關:無論是個人的膝上型電腦還是AWS S3,亦或是Openstack,或者其他基礎設施,都應該對支援容器的各項操作。
- 為自動化量身定製:制定容器統一標準,是的操作內容無關化、平臺無關化的根本目的之一,就是為了可以使容器操作全平臺自動化。
- 工業級交付:制定容器標準一大目標,就是使軟體分發可以達到工業級交付成為現實。
5. 叢集管理
Kubernetes是Google開源的Docker容器叢集管理系統,為容器化的應用提供資源排程、部署執行、服務發現、擴容縮容等整一套功能,本質上可看作是基於容器技術的mini-PaaS平臺。
關於Docker和虛擬機器的比較,請參考:
關於Docker的標準,請參考:
全文主要對docker進行概念性的介紹,想必讀到這裡,docker再也不會是一個陌生的技術。無論是在針對應用的自動化運維還是PAAS的管理策略,docker都能提供一套優秀的解決方案,docker在領域內倍受青睞,讓運維的工作有了前所未有的優質體驗。如果你也被docker的魅力深深折服的話,歡迎加入到docker的學習行列一同探索。
本文原創地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2916673/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 初識 DockerDocker
- 初識dockerDocker
- Docker 初識 1.0Docker
- 初識Docker容器Docker
- Docker初認識(一)Docker
- docker 入門到實戰 1.初識 dockerDocker
- Docker 必知必會1----初識Docker
- Docker從入門到精通(一)——初識Docker
- Docker筆記1——入門(初識+搭建+使用)Docker筆記
- Docker筆記之Docker初體驗Docker筆記
- 初識 “HTML”HTML
- 初識GolangGolang
- 初識jQueryjQuery
- Nodejs初識NodeJS
- Express初識Express
- 初識GitGit
- 初識JSJS
- CDN初識
- 初識VueVue
- webpack初識Web
- 初識HIVEHive
- 初識TcpTCP
- 初識HTTPHTTP
- 初識ARKit
- 初識HaphoopOOP
- 初識PostgreSqlSQL
- AsterixDB初識AST
- 初識Fink
- 初識WebWeb
- 初識 Shell
- 初識 reduxRedux
- 初識 SpringMVCSpringMVC
- rocketmq初識MQ
- 初識:LevelDB
- 初識JVMJVM
- 初識JavaScriptJavaScript
- 初識MybatisMyBatis
- 初識AngularJSAngularJS