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啟動也十分緩慢 。