第1章 Docker 概述
1.1 課程引入
開發/運維互掐
1.1.1
開發與測試和運維間的矛盾,主要是由於環境的不同而引發的。如果能將開發人員使用的環境交給測試與運維使用,這些問題就都能解決。
1.1.2 DevOps
DevOps 是一種思想,是一種管理模式,是一種執行規範與標準。它主要是用於促進開發、測試與運維部門間的溝通、協作與整合。運維對架構師的抱怨
1.1.3
運維總是希望,如果能搞個一鍵部署,一下搞定就好了。學習中叢集搭建的問題
1.1.4
在學習過程中,由於機器配置較低從而導致啟動的虛擬機器較少,影響學習效率。
1.2 Docker 簡介
Docker 是一個開源的應用容器 Container 引擎, 其可以讓開發者將應用及應用執行的環境打包到一個輕量級、可移植的映象中,然後釋出到任何流行的 Linux、Windows 機器上。Docker 原本是由一個 PaaS 提供商 dotCloud 公司的創始人 Solomon Hykes 發起的一個內部專案,是基於其多年雲服務技術的一次革新,使用 Go 語言開發。2013 年 3 月開源,並
在 GitHub 上進行維護。後由於 Docker 專案的火爆,2013 年底,dotCloud 公司更名為 Docker,公司域名也變更為了 https://docker.com。雲端計算中的服務包括三個層次:IaaS、PaaS、SaaS。
1.3 Docker 的用途
提供統一的執行環境
1.3.1
在生產環境中,很多時候的開發、測試及上線環境都是不一樣的,從而導致專案(war或 jar)在不同階段出現很多其它階段所不存在的奇怪的問題。Docker 容器除了可以提供相同的應用外,還提供了該應用的統一執行環境,確保在任何宿主機 HOST 上都可以跑出相同的結果。即 Docker = jar/war + 環境。便捷的應用遷移
1.3.2
由於 Docker 確保了統一的執行環境,使得應用的遷移更加便捷。無論是物理機、虛擬機器、公有云、私有云,Docker 映象的執行結果都是相同的。使用者可以很方便地將一個平臺上執行的應用,遷移到另一個平臺上,而無需擔心執行環境的變化導致應用無法正常執行。超快的啟動時間
1.3.3
傳統的虛擬機器技術啟動應用一般需要數分鐘:首先需要啟動虛擬機器,然後再載入虛擬機器作業系統,最後還需要再手工啟動應用。而 Docker 容器應用,由於直接執行於宿主機系統中,無需啟動作業系統,因此可以做到秒級、甚至毫秒級的啟動。更輕鬆的維護和擴充套件
1.3.4
Docker 公司及各個開源專案團隊一起維護了一大批高質量的官方映象,既可以直接在生產環境使用,又可以作為基礎進一步定製,大大的降低了應用服務的映象製作成本。Docker 使用的分層儲存以及映象的技術,使得應用重複部分的複用更為容易,也使得應用的維護更新更加簡單,基於基礎映象進一步擴充套件映象也變得非常簡單。
1.4 容器與虛擬機器的區別
Docker 容器的本質就是透過容器虛擬技術虛擬出的一臺主機,就像虛擬機器一樣。可以將應用及其執行環境部署在這臺虛擬出的主機上執行。但容器與虛擬機器又有著本質的不同。
1.4.1普通系統中的程式執行原理
程式是一個對計算機硬體資源排程使用的指令序列。
1.4.2 傳統虛擬技術
傳統的虛擬技術是在物理機的作業系統之上安裝一個虛擬機器管理程式,例如 VMware、VirtualBox 等。在其管理下可以建立很多個虛擬機器。每個虛擬機器需要安裝自己獨立的作業系統,而應用就是安裝在虛擬機器作業系統之上的程式,應用程式過呼叫各種命令或庫函式來使用其需要的各種系統資源。
對於完全相同的兩個應用,其若需要執行在兩個虛擬機器中,則就需要兩套完全相同的虛擬機器作業系統與 bins/libs,存在大量的資源佔用冗餘。形成資源浪費。
1.4.3 容器虛擬化技術
Docker 容器執行在 Docker 引擎之上,所有 Docker 容器共享同一個 Docker 引擎,但它們的執行又是相互隔離、互不干擾的。由於 Docker 容器不需要進行虛擬硬體及作業系統,而是共享的宿主機的硬體與作業系統,所以 Docker 容器對系統資源的佔用很少,其僅包含執行時必須的一些資源。所有 Docker 容器對於系統資源的使用都是由 Docker 引擎統一進行管理,所以對系統資源的利用率很高。無論是應用執行速度、記憶體損耗或者檔案儲存速度,都要比傳統虛擬機器技術更高效。
1.5 Windows 系統的虛擬化
1.5.1 Hypervisor
Hypervisor——一種執行在基礎物理伺服器和作業系統之間的中間軟體層,可允許多個作業系統和應用共享硬體。也可叫做 VMM( virtual machine monitor ),即虛擬機器監視器。Hypervisors 是一種在虛擬環境中的“元”作業系統。他們可以訪問伺服器上包括磁碟和記憶體在內的所有物理裝置。Hypervisors 不但協調著這些硬體資源的訪問,也同時在各個虛擬機器之間施加防護。當伺服器啟動並執行 Hypervisor 時,它會載入所有虛擬機器客戶端的作業系統同時會分配給每一臺虛擬機器適量的記憶體,CPU,網路和磁碟。
1.5.2 Hyper-V
Hyper-V 是微軟的一款虛擬化產品,是微軟第一個採用類似 Vmware ESXi 和 Citrix Xen 的基於 hypervisor 的技術。這也意味著微軟會更加直接地與市場先行者 VMware 展開競爭,但競爭的方式會有所不同。Hyper-V 是微軟提出的一種系統管理程式虛擬化技術,能夠實現桌面虛擬化。
Hyper-V 是微軟提供的商業化的 Hypervisor。KVM 與 Xen 都是 Linux 系統之上的開源的Hypervisor。
1.5.3 現在的 Windows 系統
現在的 Windows 系統並不是一個“純潔”的 windows 了,而是執行在 Hyper-V 上的虛擬機器。而原來的應用層現在也是一個執行在 Hyper-V 上的虛擬機器。系統上執行的一個個的應用,其實就是執行在應用層虛擬機器之中。作業系統虛擬機器能夠管理應用層虛擬機器。
1.5.4 windows 的啟動
1.5.5 VMware 與 Windows 系統
VMware 採用的是 VMM 虛擬化技術,該技術要求直接訪問 CPU 硬體的虛擬化功能。但VMware 作為 windows 系統中的應用,是執行在應用層虛擬機器中的。導致 VMware 無法直接訪問 CPU 硬體虛擬化功能。所以在安裝 VMware Workstation 時會出現 VMware Workstation與 Hyper-V 不相容的問題。
從 VMware Workstation 15.5.5 版本開始,VMware 重構了 VMM 技術,使其不需要直接訪問 CPU 硬體,而是透過呼叫 Windows10 系統的 WHP 的 API 來執行。這樣就解決了不相容的問題。
結論:我們在安裝 VMware Workstation 時,要安裝 15.5.5 版本或更高版本,而 Windows系統也要使用 Windows10 或更高版本。
1.6 Docker 系統架構
Docker中具有幾個非常重要的概念,下面透過理解這些概念來了解Docker的系統架構。
1.6.1 Docker Daemon
Docker Daemon,即 Dockerd,Docker 守護程序,其監聽著 Docker API 請求並管理 Docker物件,例如映象、容器、網路和卷。守護程序還可以與其他守護程序通訊以管理 Docker 服務。
1.6.2 映象 Image
Docker 映象是用於建立 Docker 容器的模板。就像物件導向程式設計中的類。
1.6.3 容器 Container
Docker 容器是映象執行時的實體。就像物件導向程式設計中類的例項。一個類可以建立出 N多個例項,那麼一個映象同樣也可以建立出 N 多個容器。每個處於執行狀態的容器中都包含著一個或多個相關的應用,且它的執行不會干擾到其它容器。因為它們之間是相互隔離的。
1.6.4 倉庫 Repository
Docker 映象倉庫用來儲存相關的一組映象,這組映象具有相同的映象名稱,都與映象
倉庫名稱相同。倉庫根據其中的映象是否可以被公開共享,可以分為公開庫與私有庫。
1.6.5 標籤 Tag
透過<repository>:<tag>
即可唯一定位一個映象。即映象標籤其實就是映象倉庫中用於區
分各個映象的一種標識,同一倉庫中的映象具有不同的標籤。
1.6.6 映象中心 Registry
Docker 的映象中心中存放著很多由官方、其他機構或個人建立的 Docker 倉庫,Docker
使用者可以直接從這些倉庫中 pull 需要的映象,也可以將自己製作的映象 push 到 Docker 映象
中心相應的倉庫中。最常用的映象中心是Docker官方的Docker Hub(https://hub.docker.com)。
1.7 總結
1.7.1課程引入
這部分是重點。
理解引發開發、測試與運維關係不和諧的原因是什麼?(環境不同)理解運維對架構師
的抱怨點在哪裡?(希望可以一鍵部署)瞭解學習過程中叢集搭建所面臨的問題是什麼?(虛
擬機不能啟動過多)
能夠描述什麼是 DevOps?(是一種思想,一種管理模式,用於促進三部門間的溝通與協
作)。
1.7.2 Docker 簡介
能夠簡述 Docker LOGO 的由來(Container 這個單詞的意思不僅有“容器”,還有“集裝
箱”。這就是為什麼 LOGO 中出現很多集裝箱的原因。至於鯨魚,是在眾多 LOGO 方案中由
網友投票投出的結果),Docker 名稱的含義(Docker 的本義為碼頭工人,即操作集裝箱的人)。
1.7.3 Docker 的用途
瞭解 Docker 可以將應用與環境打包為映象,然後可以實現“一處可執行,處處可執行”。
1.7.4 容器與虛擬機器的區別
這部分是重點與難點。
容器與虛擬機器的最大區別是,虛擬機器中存在獨立的硬體系統與作業系統,但容器中的全
部是共享的宿主機中的作業系統與硬體系統。
1.7.5 Windows 系統的虛擬化
這部分是重點與難點。
先要了解什麼是 Hypervisor(這在作業系統與硬體系統之間,用於實現多個虛擬機器共享
宿主機的硬體系統),什麼是 Hyper-V(它是微軟提供的商業化 Hypervisor,執行在 windows
系統上)? KVM 與 Xen 是 Linux 系統上的開源的 Hypervisor
然後要理解現在的 Windows 系統的架構(作業系統與應用層分別是兩個虛擬機器,位於
Hyper-V 之上)
至於 VMware Workstation,要知道從 15.5.5 版本開始,其對 VMM 虛擬機器技術進行了重
構,由原來需要直接呼叫 CPU 的虛擬化功能,改變為了透過呼叫 Win10 系統的 WHP(Windows
Hypervisor Platform)的 API 來執行。解決了 VMware Workstation 與 Hyper-V 的不相容問題。
1.7.6 Docker 系統架構
能夠對 Docker 系統架構圖進行簡述即可。