docker–docker介紹

  • 2019 年 11 月 22 日
  • 筆記

2 docker 介紹

2.1 容器技術

在電腦的世界中,容器擁有一段漫長且傳奇的歷史。容器與管理程式虛擬化 (hypervisor virtualization,HV)有所不同,管理程式虛擬化通過中間層將一台或者多 台獨立的機器虛擬運行與物理硬體之上,而容器則是直接運行在作業系統內核之上的用 戶空間。因此,容器虛擬化也被稱為「作業系統級虛擬化」,容器技術可以讓多個獨立的用 戶空間運行在同一台宿主機上。

由於 「客居」於作業系統,容器只能運行與底層宿主機相同或者相似的作業系統,這看起來 並不是非常靈活。例如:可以在Ubuntu服務中運行Redhat Enterprise Linux,但無法再 Ubuntu伺服器上運行Microsoft Windows。 相對於徹底隔離的管理程式虛擬化,容器被認為是不安全的。而反對這一觀點的人則認 為,由於虛擬容器所虛擬的是一個完整的作業系統,這無疑增大了攻擊範圍,而且還要 考慮管理程式層潛在的暴露風險。 儘管有諸多局限性,容器還是被廣泛部署於各種各樣的應用場合。在超大規模的多租戶 服務部署、輕量級沙盒以及對安全要求不太高的隔離環境中,容器技術非常流行。最常 見的一個例子就是「許可權隔離監牢」(chroot jail),它創建一個隔離的目錄環境來運行進 程。如果許可權隔離監牢正在運行的進程被入侵者攻破,入侵者便會發現自己「身陷囹圄」, 因為許可權不足被困在容器所創建的目錄中,無法對宿主機進一步破壞。 最新的容器技術引入了OpenVZ、Solaris Zones以及Linux容器(LXC)。使用這些新技 術,容器不在僅僅是一個單純的運行環境。在自己的許可權類內,容器更像是一個完整的 宿主機。容器和宿主機之間的隔離更加徹底,容器有獨立的網路和存儲棧,還擁有自己 的資源管理能力,使得同一台宿主機中的多個容器可以友好的共存。 容器被認為是精益技術,因為容器需要的開銷有限。和傳統虛擬化以及半虛擬化相比, 容器不需要模擬層(emulation layer)和管理層(hypervisor layer),而是使用操作系 統的系統調用介面。這降低了運行單個容器所需的開銷,也使得宿主機中可以運行更多 的容器。 儘管有著光輝的歷史,容器仍未得到廣泛的認可。一個很重要的原因就是容器技術的復 雜性:容器本身就比較複雜,不易安裝,管理和自動化也很困難。而Docker就是為了改 變這一切而生的。

2.2 docker 介紹

Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker』s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production. Docker 是一個開發,運輸和運行應用程式的開放平台。 Docker使您可以將應用程式與基 礎架構分離,以便快速交付軟體。 使用Docker,您可以像管理應用程式一樣管理基礎架 構(OS)。 通過利用Docker的方法快速發送,測試和部署程式碼,您可以顯著減少編寫代 碼和在生產中運行程式碼之間的延遲。(程式碼改了)

2.3 docker 好處

容器提供了隔離性,結論是,容器可以為各種測試提供很好的沙盒環境。並且,容器本 身就具有「標準性」的特徵,非常適合為服務創建構建塊。Docker的一些應用場景如下:

  • 加速本地開發和構建流程,使其更加高效、更加輕量化。本地開發人員可以構建、運 行並分享Docker容器。容器可以在開發環境中構建,然後輕鬆的提交到測試環境 中,並最終進入生產環境。 開發人員與運維人員進行職責的邏輯分離
  • 能夠讓獨立的服務或應用程式在不同的環境中,得到相同的運行結果。這一點在面向 服務的架構和重度依賴微型服務的部署由其實用。
  • 用 Docker創建隔離的環境來進行測試。例如,用Jenkins CI這樣的持續集成工具啟動 一個用於測試的容器。(持續化集成 war 實際部署:jenkins持續化集成 Jenkins+git )
  • Docker 可以讓開發者先在本機上構建一個複雜的程式或架構來進行測試,而不是一 開始就在生產環境部署、測試。
  • 構建一個多用戶的平台即服務( PaaS)基礎設施
  • 為開發、測試提供一個輕量級的獨立的沙盒環境
  • 提供軟體即服務( SaaS)應用程式,例如Memcached即服務
  • 高性能、超大規模的宿主機部署(可以很多容器)
沙盒:在電腦安全領域,沙盒(英語:sandbox,又譯為沙箱)是一種安全機制,為運行  中的程式提供的隔離環境。通常是作為一些來源不可信、具破壞力或無法判定程式意圖的程  序提供實驗之用。

2.4 集裝箱思想

Docker借鑒了標準集裝箱的概念。標準集裝箱將貨物運往世界各地,Dock將這個模型運 用到自己的設計中,唯一不同的是:集裝箱運輸貨物,而Docker運輸軟體、應用程式。 和集裝箱一樣,Docker在執行上述操作時,並不關心容器中到底裝了什麼,它不管是 web伺服器,還是資料庫,或者是應用程式伺服器什麼的。所有的容器都按照相同的方 式將內容「裝載」進去。 Docker也不關心你要把容器運到何方:我們可以在自己的筆記型電腦中構建容器,上傳到 Registry,然後下載到一個物理的或者虛擬的伺服器來測試,在把容器部署到具體的主機 中。像標準集裝箱一樣,Docker容器方便替換,可以疊加,易於分發,並且盡量通用。

2.5 container 與vm區別

物理機:一棟樓一戶人家獨立地基,獨立花園

虛擬機:一棟樓包含多套房一套房一戶人家,共享地基,共享花園,獨立衛生間、廚房和寬頻

容器:最大化的利用資源。

一棟樓包含多套房一套房一戶人家,共享地基,共享花園,獨立衛生間、廚房和寬頻

通過上面這三張抽象圖,我們大概可以通過類比概括出: 容器虛擬化的是作業系統而不 是硬體,容器之間是共享同一套作業系統資源的。虛擬機技術是虛擬出一套硬體後,在 其上運行一個完整作業系統。 容器和虛擬機具有相似的資源隔離和分配優勢,但功能有所不同,因為容器虛擬化的是 作業系統,而不是硬體,因此容器更容易移植,效率也更高。 容器在Linux上本機運行,並與其他容器共享主機的內核。 它運行一個獨立的進程,不佔 用任何其他可執行文件的記憶體,使其輕量級。相比之下,虛擬機(VM)運行一個完整 的「客戶」作業系統,通過虛擬機管理程式對主機資源進行虛擬訪問。 通常,VM提供的環 境比大多數應用程式需要的資源更多。

2.6 虛擬機已死 容器才是未來

  • 容器是一個應用層抽象,用於將程式碼和依賴資源打包在一起。 多個容器可以在同一 台機器上運行,共享作業系統內核,但各自作為獨立的進程在用戶空間中運行 。與 虛擬機相比, 容器佔用的空間較少(容器鏡像大小通常只有幾十兆),瞬間就能完 成啟動 。
  • 虛擬機( VM)是一個物理硬體層抽象,用於將一台伺服器變成多台伺服器。 管理程 序允許多個VM在一台機器上運行。每個VM都包含一整套作業系統、一個或多個應 用、必要的二進位文件和庫資源,因此佔用大量空間。而且VM啟動也十分緩慢 。