1.Docker簡介
1.1虛擬化
1.1.1什么是虛擬化
在計算機中,虛擬化(英語:Virtualization)是一種資源管理技術,是將計算機的各種實體資源,如服務器、網絡、內存及存儲等,予以抽象、轉換后呈現出來,打破實體結構間的不可切割的障礙,使用戶可以比原本的組態更好的方式來應用這些資源。這些資源的新虛擬部份是不受現有資源的架設方式,地域或物理組態所限制。一般所指的虛擬化資源包括計算能力和資料存儲。
在實際的生產環境中,虛擬化技術主要用來解決高性能的物理硬件產能過剩和老的舊的硬件產能過低的重組重用,透明化底層物理硬件,從而最大化的利用物理硬件對資源充分利用虛擬化技術種類很多,例如:軟件虛擬化、硬件虛擬化、內存虛擬化、網絡虛擬化(vip)、桌面虛擬化、服務虛擬化、虛擬機等等。
1.1.2虛擬化種類
(1)全虛擬化架構 虛擬硬件 —>虛擬操作系統
虛擬機的監視器(hypervisor)是類似于用戶的應用程序運行在主機的OS之上,如VMware的workstation,這種虛擬化產品提供了虛擬的硬件。

(2)OS層虛擬化架構: 不對硬件進行虛擬化,相同內核操作系統

(3)硬件層虛擬化

硬件層的虛擬化具有高性能和隔離性,因為hypervisor直接在硬件上運行,有利于控制VM的OS訪問硬件資源,使用這種解決方案的產品有VMware ESXi 和 Xen server
Hypervisor是一種運行在物理服務器和操作系統之間的中間軟件層,可允許多個操作系統和應用共享一套基礎物理硬件,因此也可以看作是虛擬環境中的“元”操作系統,它可以協調訪問服務器上的所有物理設備和虛擬機,也叫虛擬機監視器(Virtual Machine Monitor,VMM)。
Hypervisor是所有虛擬化技術的核心。當服務器啟動并執行Hypervisor時,它會給每一臺虛擬機分配適量的內存、CPU、網絡和磁盤,并加載所有虛擬機的客戶操作系統。宿主機
Hypervisor是所有虛擬化技術的核心,軟硬件架構和管理更高效、更靈活,硬件的效能能夠更好地發揮出來。常見的產品有:VMware、KVM、Xen等等。Openstack
1.2什么是Docker

1.2.1容器技術 類似OS層虛擬化架構:
在計算機的世界中,容器擁有一段漫長且傳奇的歷史。容器與管理程序虛擬化(hypervisor virtualization,HV)有所不同,管理程序虛擬化通過中間層將一臺或者多臺獨立的機器虛擬運行與物理硬件之上,而容器則是直接運行在操作系統內核之上的用戶空間。因此,容器虛擬化也被稱為“操作系統級虛擬化”,容器技術可以讓多個獨立的用戶空間運行在同一臺宿主機上。
由于“客居”于操作系統,容器只能運行與底層宿主機相同或者相似的操作系統,這看起來并不是非常靈活。例如:可以在Ubuntu服務中運行Redhat Enterprise Linux,但無法再Ubuntu服務器上運行Microsoft Windows。
相對于徹底隔離的管理程序虛擬化,容器被認為是不安全的。而反對這一觀點的人則認為,由于虛擬容器所虛擬的是一個完整的操作系統,這無疑增大了攻擊范圍,而且還要考慮管理程序層潛在的暴露風險。
盡管有諸多局限性,容器還是被廣泛部署于各種各樣的應用場合。在超大規模的多租戶服務部署、輕量級沙盒以及對安全要求不太高的隔離環境中,容器技術非常流行。最常見的一個例子就是“權限隔離監牢”(chroot jail),它創建一個隔離的目錄環境來運行進程。如果權限隔離監牢正在運行的進程被入侵者攻破,入侵者便會發現自己“身陷囹圄”,因為權限不足被困在容器所創建的目錄中,無法對宿主機進一步破壞。
最新的容器技術引入了OpenVZ、Solaris Zones以及Linux容器(LXC)。使用這些新技術,容器不在僅僅是一個單純的運行環境。在自己的權限類內,容器更像是一個完整的宿主機。對Docker來說,它得益于現代Linux特性,如控件組(control group)、命名空間(namespace)技術,容器和宿主機之間的隔離更加徹底,容器有獨立的網絡和存儲棧,還擁有自己的資源管理能力,使得同一臺宿主機中的多個容器可以友好的共存。
容器被認為是精益技術,因為容器需要的開銷有限。和傳統虛擬化以及半虛擬化相比,容器不需要模擬層(emulation layer)和管理層(hypervisor layer),而是使用操作系統的系統調用接口。這降低了運行單個容器所需的開銷,也使得宿主機中可以運行更多的容器。
盡管有著光輝的歷史,容器仍未得到廣泛的認可。一個很重要的原因就是容器技術的復雜性:容器本身就比較復雜,不易安裝,管理和自動化也很困難。而Docker就是為了改變這一切而生的。
1.2.2容器與虛擬機比較
(1)本質上的區別

(2)使用上的區別

1.2.3 Docker特點
(1)上手快。
用戶只需要幾分鐘,就可以把自己的程序“Docker化”。Docker依賴于“寫時復制”(copy-on-write)模型,使修改應用程序也非常迅速,可以說達到“隨心所致,代碼即改”的境界。
隨后,就可以創建容器來運行應用程序了。大多數Docker容器只需要不到1秒中即可啟動。由于去除了管理程序的開銷,Docker容器擁有很高的性能,同時同一臺宿主機中也可以運行更多的容器,使用戶盡可能的充分利用系統資源。
(2)職責的邏輯分類
使用Docker,開發人員只需要關心容器中運行的應用程序,而運維人員只需要關心如何管理容器。Docker設計的目的就是要加強開發人員寫代碼的開發環境與應用程序要部署的生產環境一致性。從而降低那種“開發時一切正常,肯定是運維的問題(測試環境都是正常的,上線后出了問題就歸結為肯定是運維的問題)”
(3)快速高效的開發生命周期
Docker的目標之一就是縮短代碼從開發、測試到部署、上線運行的周期,讓你的應用程序具備可移植性,易于構建,并易于協作。(通俗一點說,Docker就像一個盒子,里面可以裝很多物件,如果需要這些物件的可以直接將該大盒子拿走,而不需要從該盒子中一件件的取。)
(4)鼓勵使用面向服務的架構
Docker還鼓勵面向服務的體系結構和微服務架構。Docker推薦單個容器只運行一個應用程序或進程,這樣就形成了一個分布式的應用程序模型,在這種模型下,應用程序或者服務都可以表示為一系列內部互聯的容器,從而使分布式部署應用程序,擴展或調試應用程序都變得非常簡單,同時也提高了程序的內省性。(當然,可以在一個容器中運行多個應用程序)
1.3 Docker組件
1.3.1 Docker客戶端和服務器
Docker是一個客戶端-服務器(C/S)架構程序。Docker客戶端只需要向Docker服務器或者守護進程發出請求,服務器或者守護進程將完成所有工作并返回結果。Docker提供了一個命令行工具Docker以及一整套RESTful API。你可以在同一臺宿主機上運行Docker守護進程和客戶端,也可以從本地的Docker客戶端連接到運行在另一臺宿主機上的遠程Docker守護進程。

1.3.2 Docker鏡像
鏡像是構建Docker的基石。用戶基于鏡像來運行自己的容器。鏡像也是Docker生命周期中的“構建”部分。鏡像是基于聯合文件系統的一種層式結構,由一系列指令一步一步構建出來。例如:
也可以將鏡像當作容器的“源代碼”。鏡像體積很小,非常“便攜”,易于分享、存儲和更新。
1.3.3 Registry(注冊中心)
Docker用Registry來保存用戶構建的鏡像。Registry分為公共和私有兩種。Docker公司運營公共的Registry叫做Docker Hub。用戶可以在Docker Hub注冊賬號,分享并保存自己的鏡像(說明:在Docker Hub下載鏡像巨慢,可以自己構建私有的Registry)。
1.3.4 Docker容器
Docker可以幫助你構建和部署容器,你只需要把自己的應用程序或者服務打包放進容器即可。容器是基于鏡像啟動起來的,容器中可以運行一個或多個進程。我們可以認為,鏡像是Docker生命周期中的構建或者打包階段,而容器則是啟動或者執行階段。 容器基于鏡像啟動,一旦容器啟動完成后,我們就可以登錄到容器中安裝自己需要的軟件或者服務。

所以Docker容器就是:
Docker借鑒了標準集裝箱的概念。標準集裝箱將貨物運往世界各地,Docker將這個模型運用到自己的設計中,唯一不同的是:集裝箱運輸貨物,而Docker運輸軟件。
和集裝箱一樣,Docker在執行上述操作時,并不關心容器中到底裝了什么,它不管是web服務器,還是數據庫,或者是應用程序服務器什么的。所有的容器都按照相同的方式將內容“裝載”進去。
Docker也不關心你要把容器運到何方:我們可以在自己的筆記本中構建容器,上傳到Registry,然后下載到一個物理的或者虛擬的服務器來測試,在把容器部署到具體的主機中。像標準集裝箱一樣,Docker容器方便替換,可以疊加,易于分發,并且盡量通用。
使用Docker,我們可以快速的構建一個應用程序服務器、一個消息總線、一套實用工具、一個持續集成(CI)測試環境或者任意一種應用程序、服務或工具。我們可以在本地構建一個完整的測試環境,也可以為生產或開發快速復制一套復雜的應用程序棧。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接