1. 程式人生 > >Docker: 基礎介紹及配置安裝 [一]

Docker: 基礎介紹及配置安裝 [一]

一、Docker介紹

  Docker是Docker.lnc公司開源的一個基於LXC技術之上構建的Container容器引擎,原始碼託管在Github上,基於Go語言並遵從Apache2.0協議開源
  Docker是通過核心虛擬化技術(namespaces及cgroups等)來提供容器的資源隔離與安全保障等。由於Docker通過作業系統層的虛擬化實現隔離,所以Docker容器在執行時,不需要類似虛擬機器(VM)額外的作業系統開銷,提高資源利用率

二、Docker的三大理念

 構建  運輸  執行

Docker組成


Docker的組成部分docker類似於cs結構
 Docker Client
 Docker Server
我們可以將docker啟動比喻成Docker server,我們執行命令的時候相當於Docker client

[[email protected] ~]# docker version
Client:
 Version:           18.09.0
 API version:       1.39
 Go version:        go1.10.4
 Git commit:        4d60db4
 Built:             Wed Nov  7 00:48:22 2018
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.0
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.4
  Git commit:       4d60db4
  Built:            Wed Nov  7 00:19:08 2018
  OS/Arch:          linux/amd64
  Experimental:     false


提示:目前的版本是如果docker的服務端掛了,執行在docker上的所有容器都會掛掉

Docker元件


映象(Image)
容器(Container)
倉庫(Repository)
 
映象介紹:類似於虛擬機器,作用和虛擬機器是一樣的,唯獨是組成部分會有些區別。簡單的說如果我們想啟動一個容器就必須要有映象

容器介紹: docker是通過容器來執行業務的,就像執行一個kvm虛擬機器是一樣的。容器其實就是從映象建立的一個例項。
  我們可以對容器進行增刪改查,容器之間也是相互隔離的。和虛擬機器最大的區別就是一個是虛擬的一個是隔離的。
缺點:不會像虛擬機器那樣隔離的那麼徹底,我們可以將容器理解為簡化版的linux,有程序執行在裡面。

倉庫介紹: 根據docker的三大理念構建 運輸 執行,我們就需要一個倉庫來存放映象
簡單的說:我們將映象建立完成就需要存放到倉庫裡面,進行集中式的管理。倉庫這點類似於github,docker也有一個dockerhub,他也是一個公共對外的倉庫。

三、虛擬機器和docker的區別

 

  簡單解釋,VMware執行在作業系統上,而docker是直接執行在應用上。所以docker無法提供一個像VMware那樣完全的隔離,甚至到很多地方都沒有進行隔離,比如說使用者空間。
  這裡可以解釋一下 如果你用的是centos5版本那你就別想安裝docker了,如果是centos6的你可以看一眼。因為核心版本比較低,但是如果使用烏班圖就可以,因為烏班圖的核心更新的比較快。
  如果公司伺服器是centos5和centos6 用docker就需要升級核心,相對比較麻煩.

四、Docker與OpenStack區別

類別 Docker openstack/KVM
部署難度 非常簡單 元件多,部署複雜
啟動速度 秒級 分鐘級
執行效能 和物理系統幾乎一致 VM會佔用一些資源
映象體積 映象是MB級別 虛擬機器映象GB級別
管理效率 管理簡單 元件相互依賴,管理複雜
隔離性 隔離性高 徹底隔離
可管理性 單程序、不建議啟動SSH 完整的系統管理
網路連線 比較弱 藉助Neutron可以靈活元件各類網路架構


  提示:在這裡可以簡單的說一下,有些場景是不適合用到docker。例如我前端web使用docker,此時docker掛掉了,裡面不會像資料庫那樣有資料寫入。這時候我從新起一個docker就可以了。所以有的場景是不適合使用docker的

五、Docker能幹什麼?

一、簡化配置

  這是Docker公司宣傳的Docker的主要使用場景。虛擬機器的最大好處是能在你的硬體設施上執行各種配置不一樣的平 臺(軟體、系統),Docker在降低額外開銷的情況下提供了同樣的功能。它能讓你將執行環境和配置放在程式碼中然後部署,同一個Docker的配置可以在 不同的環境中使用,這樣就降低了硬體要求和應用環境之間耦合度。
二、程式碼流水線(Code Pipeline)管理

  前一個場景對於管理程式碼的流水線起到了很大的幫助。程式碼從開發者的機器到最終在生產環境上的部署,需要經過很多的中間環境。而每一箇中間環境都有自己微小的差別,Docker給應用提供了一個從開發到上線均一致的環境,讓程式碼的流水線變得簡單不少。

三、提高開發效率

  這就帶來了一些額外的好處:Docker能提升開發者的開發效率。如果你想看一個詳細一點的例子,可以參考Aater在DevOpsDays Austin 2014 大會或者是DockerCon上的演講。

  不同的開發環境中,我們都想把兩件事做好。一是我們想讓開發環境儘量貼近生產環境,二是我們想快速搭建開發環境。

  理想狀態中,要達到第一個目標,我們需要將每一個服務都跑在獨立的虛擬機器中以便監控生產環境中服務的執行狀態。然而,我們卻不想每次都需要網路連 接,每次重新編譯的時候遠端連線上去特別麻煩。這就是Docker做的特別好的地方,開發環境的機器通常記憶體比較小,之前使用虛擬的時候,我們經常需要為 開發環境的機器加記憶體,而現在Docker可以輕易的讓幾十個服務在Docker中跑起來。

四、隔離應用

  有很多種原因會讓你選擇在一個機器上執行不同的應用,比如之前提到的提高開發效率的場景等

五、整合伺服器

  正如通過虛擬機器來整合多個應用,Docker隔離應用的能力使得Docker可以整合多個伺服器以降低成本。由於沒有多個作業系統的記憶體佔用,以及能在多個例項之間共享沒有使用的記憶體,Docker可以比虛擬機器提供更好的伺服器整合解決方案

六、除錯能力

  Docker提供了很多的工具,這些工具不一定只是針對容器,但是卻適用於容器。它們提供了很多的功能,包括可以為容器設定檢查點、設定版本和檢視兩個容器之間的差別,這些特性可以幫助除錯Bug。你可以在《Docker拯救世界》的文章中找到這一點的例證。

七、多租戶環境   

另外一個Docker有意思的使用場景是在多租戶的應用中,它可以避免關鍵應用的重寫。我們一個特別的關於這個場景的 例子是為IoT(譯者注:物聯網)的應用開發一個快速、易用的多租戶環境。這種多租戶的基本程式碼非常複雜,很難處理,重新規劃這樣一個應用不但消耗時間, 也浪費金錢。

  使用Docker,可以為每一個租戶的應用層的多個例項建立隔離的環境,這不僅簡單而且成本低廉,當然這一切得益於Docker環境的啟動速度和其高效的diff命令。

八、快速部署

  在虛擬機器之前,引入新的硬體資源需要消耗幾天的時間。Docker的虛擬化技術將這個時間降到了幾分鐘,Docker只是建立一個容器程序而無需啟動作業系統,這個過程只需要秒級的時間。這正是Google和Facebook都看重的特性。

  你可以在資料中心建立銷燬資源而無需擔心重新啟動帶來的開銷。通常資料中心的資源利用率只有30%,通過使用Docker並進行有效的資源分配可以提高資源的利用率。

小結: 一句話說明docker的本質就是 低開銷(系統檔案、記憶體 共用)的虛擬機器

六、Docker改變了什麼?


面向產品:產品交付
面向開發:簡化環境配置
面向測試:多版本測試
面向運維:環境一致
面向架構:自動化擴容(微服務)