Docker——(一)簡介

目錄

 

1、什麼是虛擬化

2、什麼是Docker

3、爲什麼選擇Docker?

(1)上手快。

(2)職責的邏輯分類

(3)快速高效的開發生命週期

(4)鼓勵使用面向服務的架構

(5)更高效的利用系統資源

(6)更快速的啓動時間

(7)持續交付和部署

對比傳統虛擬機總結

4、容器與虛擬機比較

5、Docker 組件

 5.1Docker服務器與客戶端

5.2 Docker鏡像與容器

5.3Registry(註冊中心)

6、Docker引擎

概述


1、什麼是虛擬化

        在計算機中,虛擬化(英語:Virtualization)是一種資源管理技術,是將計算機的各種實體資源,如服務器、網絡、內存及存儲等,予以抽象、轉換後呈現出來,打破實體結構間的不可切割的障礙,使用戶可以比原本的組態更好的方式來應用這些資源。這些資源的新虛擬部份是不受現有資源的架設方式,地域或物理組態所限制。一般所指的虛擬化資源包括計算能力和資料存儲。

在實際的生產環境中,虛擬化技術主要用來解決高性能的物理硬件產能過剩和老的舊的硬件產能過低的重組重用,透明化底層物理硬件,從而最大化的利用物理硬件   對資源充分利用

虛擬化技術種類很多,例如:軟件虛擬化、硬件虛擬化、內存虛擬化、網絡虛擬化(vip)、桌面虛擬化、服務虛擬化、虛擬機等等。

 

2、什麼是Docker

       Docker 是一個開源項目,誕生於 2013 年初,最初是 dotCloud 公司內部的一個業餘項目。它基於 Google 公司推出的 Go 語言實現。 項目後來加入了 Linux 基金會,遵從了 Apache 2.0 協議,項目代碼在 GitHub 上進行維護。

 

Docker 自開源後受到廣泛的關注和討論,以至於 dotCloud 公司後來都改名爲 Docker Inc。Redhat 已經在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產品中廣泛應用。

Docker 項目的目標是實現輕量級的操作系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。

在 LXC 的基礎上 Docker 進行了進一步的封裝,讓用戶不需要去關心容器的管理,使得操作更爲簡便。用戶操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單。

3、爲什麼選擇Docker?

(1)上手快。

用戶只需要幾分鐘,就可以把自己的程序“Docker化”。Docker依賴於“寫時複製”(copy-on-write)模型,使修改應用程序也非常迅速,可以說達到“隨心所致,代碼即改”的境界。

         隨後,就可以創建容器來運行應用程序了。大多數Docker容器只需要不到1秒中即可啓動。由於去除了管理程序的開銷,Docker容器擁有很高的性能,同時同一臺宿主機中也可以運行更多的容器,使用戶儘可能的充分利用系統資源。

(2)職責的邏輯分類

使用Docker,開發人員只需要關心容器中運行的應用程序,而運維人員只需要關心如何管理容器。Docker設計的目的就是要加強開發人員寫代碼的開發環境與應用程序要部署的生產環境一致性。從而降低那種“開發時一切正常,肯定是運維的問題(測試環境都是正常的,上線後出了問題就歸結爲肯定是運維的問題)”

(3)快速高效的開發生命週期

Docker的目標之一就是縮短代碼從開發、測試到部署、上線運行的週期,讓你的應用程序具備可移植性,易於構建,並易於協作。(通俗一點說,Docker就像一個盒子,裏面可以裝很多物件,如果需要這些物件的可以直接將該大盒子拿走,而不需要從該盒子中一件件的取。)

(4)鼓勵使用面向服務的架構

Docker還鼓勵面向服務的體系結構和微服務架構。Docker推薦單個容器只運行一個應用程序或進程,這樣就形成了一個分佈式的應用程序模型,在這種模型下,應用程序或者服務都可以表示爲一系列內部互聯的容器,從而使分佈式部署應用程序,擴展或調試應用程序都變得非常簡單,同時也提高了程序的內省性。(當然,可以在一個容器中運行多個應用程序)

(5)更高效的利用系統資源

由於容器不需要進行硬件虛擬以及運行完整操作系統等額外開銷,Docker 對系統資源的利用率更高。無論是應用執行速度、內存損耗或者文件存儲速度,都要比傳統虛擬機技術更高效。因此,相比虛擬機技術,一個相同配置的主機,往往可以運行更多數量的應用。

(6)更快速的啓動時間

傳統的虛擬機技術啓動應用服務往往需要數分鐘,而 Docker 容器應用,由於直接運行於宿主內核,無需啓動完整的操作系統,因此可以做到秒級、甚至毫秒級的啓動時間。大大的節約了開發、測試、部署的時間。

(7)持續交付和部署

對開發和運維(DevOps)人員來說,最希望的就是一次創建或配置,可以在任意地方正常運行。

使用 Docker 可以通過定製應用鏡像來實現持續集成、持續交付、部署。開發人員可以通過 Dockerfile 來進行鏡像構建,並結合 持續集成(Continuous Integration) 系統進行集成測試,而運維人員則可以直接在生產環境中快速部署該鏡像,甚至結合 持續部署(Continuous Delivery/Deployment) 系統進行自動部署。

而且使用 Dockerfile 使鏡像構建透明化,不僅僅開發團隊可以理解應用運行環境,也方便運維團隊理解應用運行所需條件,幫助更好的生產環境中部署該鏡像。

(8)更輕鬆的遷移

由於 Docker 確保了執行環境的一致性,使得應用的遷移更加容易。Docker 可以在很多平臺上運行,無論是物理機、虛擬機、公有云、私有云,甚至是筆記本,其運行結果是一致的。因此用戶可以很輕易的將在一個平臺上運行的應用,遷移到另一個平臺上,而不用擔心運行環境的變化導致應用無法正常運行的情況。

(9)更輕鬆的維護和擴展

Docker 使用的分層存儲以及鏡像的技術,使得應用重複部分的複用更爲容易,也使得應用的維護更新更加簡單,基於基礎鏡像進一步擴展鏡像也變得非常簡單。此外,Docker 團隊同各個開源項目團隊一起維護了一大批高質量的 官方鏡像,既可以直接在生產環境使用,又可以作爲基礎進一步定製,大大的降低了應用服務的鏡像製作成本。

對比傳統虛擬機總結

特性 容器 虛擬機
啓動 秒級 分鐘級
硬盤使用 一般爲 MB 一般爲 GB
性能 接近原生 弱於
系統支持量 單機支持上千個容器 一般幾十個

 

4、容器與虛擬機比較

下面的圖片比較了 Docker 和傳統虛擬化方式的不同之處,可見容器是在操作系統層面上實現虛擬化,直接複用本地主機的操作系統,而傳統方式則是在硬件層面實現。

 

與傳統的虛擬機相比,Docker優勢體現爲啓動速度快、佔用體積小。

5、Docker 組件

 5.1Docker服務器與客戶端

Docker是一個客戶端-服務器(C/S)架構程序。Docker客戶端只需要向Docker服務器或者守護進程發出請求,服務器或者守護進程將完成所有工作並返回結果。Docker提供了一個命令行工具Docker以及一整套RESTful API。你可以在同一臺宿主機上運行Docker守護進程和客戶端,也可以從本地的Docker客戶端連接到運行在另一臺宿主機上的遠程Docker守護進程。

5.2 Docker鏡像與容器

 

鏡像是構建Docker的基石。用戶基於鏡像來運行自己的容器。鏡像也是Docker生命週期中的“構建”部分。鏡像是基於聯合文件系統的一種層式結構,由一系列指令一步一步構建出來。例如:

添加一個文件;

執行一個命令;

打開一個窗口。

也可以將鏡像當作容器的“源代碼”。鏡像體積很小,非常“便攜”,易於分享、存儲和更新。

Docker可以幫助你構建和部署容器,你只需要把自己的應用程序或者服務打包放進容器即可。容器是基於鏡像啓動起來的,容器中可以運行一個或多個進程。我們可以認爲,鏡像是Docker生命週期中的構建或者打包階段,而容器則是啓動或者執行階段。  容器基於鏡像啓動,一旦容器啓動完成後,我們就可以登錄到容器中安裝自己需要的軟件或者服務。

所以Docker容器就是:

一個鏡像格式;

一些列標準操作;

一個執行環境。

Docker借鑑了標準集裝箱的概念。標準集裝箱將貨物運往世界各地,Docker將這個模型運用到自己的設計中,唯一不同的是:集裝箱運輸貨物,而Docker運輸軟件。

         和集裝箱一樣,Docker在執行上述操作時,並不關心容器中到底裝了什麼,它不管是web服務器,還是數據庫,或者是應用程序服務器什麼的。所有的容器都按照相同的方式將內容“裝載”進去。

         Docker也不關心你要把容器運到何方:我們可以在自己的筆記本中構建容器,上傳到Registry,然後下載到一個物理的或者虛擬的服務器來測試,在把容器部署到具體的主機中。像標準集裝箱一樣,Docker容器方便替換,可以疊加,易於分發,並且儘量通用。

 

5.3Registry(註冊中心)

Docker用Registry來保存用戶構建的鏡像。Registry分爲公共和私有兩種。Docker公司運營公共的Registry叫做Docker Hub。用戶可以在Docker Hub註冊賬號,分享並保存自己的鏡像(說明:在Docker Hub下載鏡像巨慢,可以自己構建私有的Registry)。 

Docker官網: https://hub.docker.com/  

 

6、Docker引擎

概述

Docker 引擎是一個包含以下主要組件的客戶端服務器應用程序。

  • 一種服務器,它是一種稱爲守護進程並且長時間運行的程序。
  • REST API用於指定程序可以用來與守護進程通信的接口,並指示它做什麼。
  • 一個有命令行界面 (CLI) 工具的客戶端。

Docker 引擎組件的流程如下圖所示:

                                    

 

 

發佈了202 篇原創文章 · 獲贊 46 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章