一、【Docker筆記】進入Docker世界
- 2020 年 4 月 3 日
- 筆記
我們平時判斷一個電腦的性能主要看什麼?磁盤讀寫?CPU的主頻高低?還是內存的大小?可是作為個人使用者來說,這些參數高一些足夠我們去使用了,可是對於一個大型系統甚至是超大型系統,當前的硬件是遠遠達不到的。而作為當前的雲計算時代,虛擬化技術就發揮了自己的獨特的作用。
隨着信息技術的快速發展,虛擬化技術也在不斷的豐富和創新。從20世紀60年代的IBM推出大型主機虛擬機到現在的X86平台上的虛擬化,虛擬化既可以通過硬件模擬來實現,同時也可通過操作系統來實現,而當前的容器虛擬化就是充分地利用了操作系統的機制和特性,實現輕量級的虛擬化,在這些虛擬化技術中,Docker又是其中的佼佼者。
一、什麼是Docker
1、Docker一個開源項目
Docker是一個基於Go語言實現的雲開源項目,它誕生於2013年,最初發起者未dotCloud公司。目前Docker已經成為了一個生態體系,並已加入Linux基金會,遵循Apache2.0協議。目前主流的Linux操作系統都支持Docker,而Docker的主要目標是通過對應用組件的封裝、分發、部署、運行等生命周期的管理,達到應用組件(Web應用 / 數據庫服務 / 操作系統或編譯器等)級別的「一次封裝,到處運行」。
2、Linux容器技術
Docker引擎的基礎就是Linux容器(Linux Containers,LXC)技術。對於容器技術,IBM DeveloperWorks給出了描述:容器有效地將由單個操作系統管理的資源劃分到孤立的組中,以便更好地在孤立的組之間平衡有衝突的資源使用需求。與虛擬化相比,這即不需要指令級模擬,也不需要即時編譯。容器可以在核心CPU本地運行指令,而不需要任何專門的解釋機制。同時也避免了准虛擬化和系統調用替換中的複雜性。
當然Linux容器也並不是一個全新的概念,只是後來LXC項目借鑒了前人成熟的容器設計理念,並基於一些新的內核特性實現了擴展性的虛擬化容器技術。關鍵的是,LXC由此被集成到了Linux內核中,而成為Linux系統輕量級容器技術的事實標準。
3、從Linux容器到Docker
在Linux容器技術的基礎上,Docker優化了容器的使用體驗。同時,Docker提供了各種容器管理工具讓用戶無需關注底層的操作,可以簡單地管理和使用。
二、為什麼要使用Docker
1、Docker容器虛擬化的好處
高效地構建應用,開發者能方便地創建運行在雲平台上的應用,應用能夠脫離底層機器,同時在任何時間和任何地點都是可獲取的。而Docker提供容器打包應用,當我們在遷移系統時,只要啟動需要的容器就可以了。這將節約時間,並降低部署過程出現問題的風險。
2、Docker在開發和運維中的優勢
對於開發和運維人員來說,最理想的就是一次性地創建和配置,可以在任意環境、任意時間讓應用正常地運行。而Docker即可實現:1、更快速的交付和部署。2、更高效的資源利用。3、更輕鬆的遷移和擴展。4、更簡單的更新管理。
3、Docker與虛擬機對比
作為輕量級的虛擬化方式,Docker在運行應用上跟傳統的虛擬機方式相比具有顯著的優勢:
1、Docker容器更快,啟動和停止都是秒級。
2、Docker容器對系統資源需求更少。
3、Docker指令簡明,學習成本底。
4、Docker通過Dockerfile配置文件支持靈活的自動化創建和部署機制,提高工作效率。
特性 | 容器 | 虛擬機 |
---|---|---|
啟動速度 | 秒級 | 分鐘級 |
硬盤使用 | 一般未MB | 一般為GB |
性能 | 接近原生 | 弱於 |
系統支持量 | 單機支持上千個容器 | 一般幾十個 |
隔離性 | 安全隔離 | 完全隔離 |
三、虛擬化與Docker比較
虛擬化技術是一個通用的概念,在不同的領域有不同的理解。而在計算領域,一般指的是計算虛擬化或服務器虛擬化。虛擬化的核心是對資源進行抽象,目標為在同一機器上運行多個系統或應用,提高系統資源的利用率,同時降低成本、方便管理和容錯容災等好處。
從類型區分,虛擬化技術可分為基於硬件的虛擬化和基於軟件的虛擬化。而我們一般討論的都是基於軟件的虛擬化,而基於軟件的虛擬化從對象層次上又分為應用虛擬化和平台虛擬化。其中主要討論的又是平台虛擬化,平台虛擬化又可分為完全虛擬化、硬件輔助虛擬化、部分虛擬化、超虛擬化、操作系統級虛擬化。而Docker就屬於操作系統級虛擬化。
表1:傳統的虛擬化方式
應用程序 | 應用程序 |
運行時環境 | 運行時環境 |
虛擬機操作系統 | 虛擬機操作系統 |
虛擬機管理程序 | |
宿主機操作系統 | |
硬件層 |
表2:Docker的虛擬化方式
應用程序 | 應用程序 |
運行時環境 | 運行時環境 |
Docker容器支持 | |
宿主機操作系統 | |
硬件層 |