Docker: 基礎介紹 [一]

1、Docker介紹

  Docker是Docker.lnc公司開源的一個基於LXC技術之上構建的Container容器引擎,源代碼託管在Github上,基於Go語言並聽從Apache2.0協議開源
  Docker是經過內核虛擬化技術(namespaces及cgroups等)來提供容器的資源隔離與安全保障等。因爲Docker經過操做系統層的虛擬化實現隔離,因此Docker容器在運行時,不須要相似虛擬機(VM)額外的操做系統開銷,提升資源利用率前端

2、Docker的三大理念

 構建  運輸  運行linux

Docker組成


Docker的組成部分docker相似於cs結構
 Docker Client
 Docker Server
咱們能夠將docker啓動比喻成Docker server,咱們執行命令的時候至關於Docker client git

[root@docker1 ~]# 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上的全部容器都會掛掉github

Docker組件


鏡像(Image)
容器(Container)
倉庫(Repository)
 
鏡像介紹:相似於虛擬機,做用和虛擬機是同樣的,惟獨是組成部分會有些區別。簡單的說若是咱們想啓動一個容器就必需要有鏡像web

容器介紹: docker是經過容器來運行業務的,就像運行一個kvm虛擬機是同樣的。容器其實就是從鏡像建立的一個實例。
  咱們能夠對容器進行增刪改查,容器之間也是相互隔離的。和虛擬機最大的區別就是一個是虛擬的一個是隔離的。
缺點:不會像虛擬機那樣隔離的那麼完全,咱們能夠將容器理解爲簡化版的linux,有進程運行在裏面。docker

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

3、虛擬機和docker的區別

 

  簡單解釋,VMware運行在操做系統上,而docker是直接運行在應用上。因此docker沒法提供一個像VMware那樣徹底的隔離,甚至到不少地方都沒有進行隔離,好比說用戶空間。
  這裏能夠解釋一下 若是你用的是centos5版本那你就別想安裝docker了,若是是centos6的你能夠看一眼。由於內核版本比較低,可是若是使用烏班圖就能夠,由於烏班圖的內核更新的比較快。
  若是公司服務器是centos5和centos6 用docker就須要升級內核,相對比較麻煩.centos

4、Docker與OpenStack區別

類別 Docker openstack/KVM
部署難度 很是簡單 組件多,部署複雜
啓動速度 秒級 分鐘級
執行性能 和物理系統幾乎一致 VM會佔用一些資源
鏡像體積 鏡像是MB級別 虛擬機鏡像GB級別
管理效率 管理簡單 組件相互依賴,管理複雜
隔離性 隔離性高 完全隔離
可管理性 單進程、不建議啓動SSH 完整的系統管理
網絡鏈接 比較弱 藉助Neutron能夠靈活組件各種網絡架構


  提示:在這裏能夠簡單的說一下,有些場景是不適合用到docker。例如我前端web使用docker,此時docker掛掉了,裏面不會像數據庫那樣有數據寫入。這時候我重新起一個docker就能夠了。因此有的場景是不適合使用docker的安全

5、Docker能幹什麼?

1、簡化配置

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

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

3、提升開發效率

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

  不一樣的開發環境中,咱們都想把兩件事作好。一是咱們想讓開發環境儘可能貼近生產環境,二是咱們想快速搭建開發環境。

  理想狀態中,要達到第一個目標,咱們須要將每個服務都跑在獨立的虛擬機中以便監控生產環境中服務的運行狀態。然而,咱們卻不想每次都須要網絡連 接,每次從新編譯的時候遠程鏈接上去特別麻煩。這就是Docker作的特別好的地方,開發環境的機器一般內存比較小,以前使用虛擬的時候,咱們常常須要爲 開發環境的機器加內存,而如今Docker能夠輕易的讓幾十個服務在Docker中跑起來。

4、隔離應用

  有不少種緣由會讓你選擇在一個機器上運行不一樣的應用,好比以前提到的提升開發效率的場景等

5、整合服務器

  正如經過虛擬機來整合多個應用,Docker隔離應用的能力使得Docker能夠整合多個服務器以下降成本。因爲沒有多個操做系統的內存佔用,以及能在多個實例之間共享沒有使用的內存,Docker能夠比虛擬機提供更好的服務器整合解決方案

6、調試能力

  Docker提供了不少的工具,這些工具不必定只是針對容器,可是卻適用於容器。它們提供了不少的功能,包括能夠爲容器設置檢查點、設置版本和查看兩個容器之間的差異,這些特性能夠幫助調試Bug。你能夠在《Docker拯救世界》的文章中找到這一點的例證。

7、多租戶環境   

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

  使用Docker,能夠爲每個租戶的應用層的多個實例建立隔離的環境,這不只簡單並且成本低廉,固然這一切得益於Docker環境的啓動速度和其高效的diff命令。

8、快速部署

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

  你能夠在數據中心建立銷燬資源而無需擔憂從新啓動帶來的開銷。一般數據中心的資源利用率只有30%,經過使用Docker並進行有效的資源分配能夠提升資源的利用率。

小結: 一句話說明docker的本質就是 低開銷(系統文件、內存 共用)的虛擬機

6、Docker改變了什麼?

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

相關文章
相關標籤/搜索