一. docker介紹
個人主機時代比cpu主頻高低和記憶體大小,雲計算時代虛擬化技術基石。
虛擬化可以通過硬體模擬實現,也可以通過作業系統實現。
充分利用作業系統本身的機制和特性,實現輕量級的虛擬化,docker是佼佼者。
1.1 什麼是docker
通過對應用元件的封裝(packaging)、分發(distribution)、部署(deployment)、執行(runtime)等生命週期的管理,達到應用元件級別的」一次封裝,到處執行「。這裡的應用元件,可以是乙個web應用,也可以是一套資料庫服務,甚至是乙個作業系統或編譯器。
linux容器技術:
docker引擎的基礎是linux容器(linux containers,lxc)技術。
容器有效地將由單個作業系統管理的資源劃分到孤立的組中,以便更好地在孤立的組之間平衡有衝突的資源使用需求。與虛擬化相比,這樣既不需要指令級模擬,也不需要即時編譯。容器可以在核心cpu本地執行指令,而不需要任何專門的解釋機制。此外,也避免了準虛擬化和系統呼叫替換中的複雜性。
從linux容器到docker:
在lxc技術基礎上,docker進一步優化了容器的使用體驗。docker提供了各種容器管理工具(如分發、版本、移植等)讓使用者無需關注底層的操作,可以簡明地管理和使用容器。使用者操作docker容器就像操作乙個輕量級的虛擬機器那樣簡單。
可以將docker容器理解為一種沙盒。每個容器內執行乙個應用,不同的容器相互隔離,容器之間也可以建立通訊機制。容器的建立和停止都十分快速,容器自身對資源的需求也十分有限,遠遠低於虛擬機器。
1.2 為什麼使用docker
docker容器虛擬化的好處:
伺服器遷移時,往往需要重新部署和除錯,這些瑣碎無趣的工作極大地降低了工作效率。
而docker提供了一種更為聰明的方式,通過容器來打包應用,意味著遷移只需要在新的伺服器上啟動需要的容器就可以了。這將節約大量時間,並降低部署過程出現問題的風險。
docker在開發和運維中的優勢:
1)更快速地交付和部署。使用docker,開發人員可以使用映象來快速構建一套標準的開發環境;開發完成後,測試和運維人員可以直接使用相同環境來部署**。
2)更高效的資源利用。docker容器的執行不需要額外的虛擬化管理程式(virtual machine manager,vmm,以及hypervisor)支援,它是核心級的虛擬化,可以實現更高的效能,同時對資源的額外需求很低。
3)更輕鬆的遷移和擴充套件。docker容器幾乎可以在任意的平台上執行,包括物理機、虛擬機器、公有雲、私有雲、個人電腦、伺服器等。使用者可以在不同平台之間輕鬆遷移應用。
4)更簡單的更新管理。使用dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。並且所有修改都以增量的方式進行分發和更新,從而實現自動化並且高效的容器管理。
docker與虛擬機器比較:
作為一種輕量級的虛擬化方式,docker在執行應用上跟傳統的虛擬機器方式相比具有顯著優勢:
1)docker容器很快,啟動和停止可以在秒級實現,比傳統虛擬機器方式快得多。。
2)docker容器對系統資源需求很少,一台主機上可以同時執行數千個docker容器。
3)docker通過類似git的操作來方便使用者獲取、分發和更新應用映象,指令簡明,學習成本較低。
4)docker通過dockfile配置檔案來支援靈活的自動化建立和部署機制,提高工作效率。
docker容器除了執行其中的應用之外,基本不消耗額外的系統資源,保證應用效能的同時,盡量減小系統開銷。傳統虛擬機器方式執行n個不同的應用就要啟動n個虛擬機器(每個虛擬機器需要單獨分配獨佔的記憶體、磁碟等資源),而docker只需要啟動n個隔離的容器,並將應用放到容器內即可。
特性容器
虛擬機器啟動速度
秒級分鐘級
硬碟使用
一般為mb
一般為gb
效能接近原生
弱於系統支援量
單機支援上千個容器
一般幾十個
隔離性安全隔離
完全隔離
虛擬機器的隔離性比容器隔離性較好。
1.3 虛擬化與docker
在計算機技術中,虛擬化(virtualization)是一種資源管理技術,是將計算機的各種實體資源,如伺服器、網路、記憶體及儲存等,予以抽象、轉換後呈現出來,打破實體結構間的不可切割的障礙,使使用者可以用比原本的組態更好的方式來應用這些資源。
虛擬化技術可分為基於硬體的虛擬化和基於軟體的虛擬化。
基於軟體的虛擬化從物件所在的層次,又可以分為應用虛擬化和平台虛擬化。前者一般指的是一些模擬裝置或wine這樣的軟體。後者又可以細分為如下幾個子類:
1)完全虛擬化。虛擬機器模擬完整的底層硬體環境和特權指令的執行過程,客戶作業系統無需進行修改。
2)硬體輔助虛擬化。利用硬體(主要是cpu)輔助支援處理敏感指令來實現完全虛擬化的功能,客戶作業系統無需修改。
3)部分虛擬化。只針對部分硬體資源進行虛擬化,客戶作業系統需要進行修改,現在有些虛擬化技術的早期版本僅支援部分虛擬化。
4)超虛擬化。部分硬體介面以軟體的形式提供給客戶機作業系統,客戶作業系統需要進行修改。
5)作業系統級虛擬化。核心通過建立多個虛擬的作業系統例項(核心和庫)來隔離不同的程序。容器相關技術即在這個範疇。
傳統方式是在硬體層面實現虛擬化,需要有額外的虛擬機器管理應用和虛擬機器作業系統層。
docker容器是在作業系統層面上實現虛擬化,直接復用本地主機的作業系統,因此更加輕量級。
傳統的虛擬機器在硬體層和宿主作業系統上有一層虛擬機器管理系統,在此之上是各個虛擬機器的作業系統,然後是執行時環境和應用程式。
docker容器是在硬體層和宿主作業系統上有一層docker容器支援,在此之上是每個應用的執行時環境和應用程式。
Docker基礎入門實戰之Docker安裝
虛擬化技術是乙個通用的概念,在不同的領域存在不同的理解,在計算機領域,一般指計算機虛擬化或伺服器虛擬化。虛擬化是一種資源管理技術,可以抽象計算機的各種實體資源,如伺服器 網路 記憶體及儲存等,打破結構之間的未切割障礙,允許使用者更好的應用這些資源。虛擬化包含硬體虛擬化 作業系統虛擬化等。其中,硬體虛...
Node實戰 1 入門
當web應用需要連線到資料庫 快取伺服器 檔案系統 應用伺服器或其他服務時,node.js便會大放異彩。但是另一方面,實際上它並不是那些需要做長時間精密計算的伺服器的最佳執行環境。因此,單程序 單執行緒的node模型在處理乙個給定的請求時,如果該請求需要花費大量的時間生成乙個複雜的密碼摘要或者處理影...
ElasticSearch入門實戰1
document資料格式 電商 商品管理案例背景介紹 簡單的集群管理 商品的crud操作 document curd 面向文件的搜尋分析引擎 public class employee private class employeeinfo employeeinfo info new employee...