天天看點

Docker學習筆記2: Docker 概述

一、什麼是Docker

           Docker是基于Go語言實作的雲開源項目. Docker 的主要目标是:"Bulid,Ship and  Run Any App ,AnyWhere" ,即通過對應用元件的封裝、分發、部署、運作等生命周期的管理,達到應用元件級别的"一次封裝,到處運作"。這裡的應用元件,即可以是一個Web應用,也可以使一套資料庫服務,甚至是一個作業系統或編譯器.

          Docker 基于Linux 的多項開源技術提供了高效、靈活和輕量級的容器方案,并且支援在多種主流雲平台(PaaS) 和本地系統上部署。可以說Docker為應用的開發和部署提供了"一站式"的解決方案。 

        Docker引擎的基礎是Linux容器(Linux Containers , LXC)技術. 在LXC的基礎上,Docker進一步優化了容器的使用體驗。Docker提供了各種容器管理工具(如分發、版本、移植等)讓使用者無需關注底層的操作,可以簡單明了的管理和使用容器。使用者操作Docker容器就像操作一個輕量級的虛拟機那樣簡單.

二、Docker與虛拟機的比較

    作為一種輕量級的虛拟化方式,Docker在運作應用上跟傳統的虛拟機方式相比具有顯著優勢:

  • Docker容器很快,啟動和停止可以在秒級實作,這相比傳統的虛拟機方式要快很多。
  • Docker容器對系統資源需求很少,一台主機上可以同時運作數千個Docker容器。
  • Docker通過類似Git的操作來友善使用者擷取、分發和更新應用鏡像,指令簡明 ,學習成本很低。
  • Docker通過Dockerfile配置檔案來支援靈活的自動化建立和部署機制,提高工作效率.

      Docker容器除了運作其中的應用之外,基本不消耗額外的系統資源,保證應有性能的同時,盡量減少系統開銷。傳統虛拟機方式運作N個不同的應用就要啟動N個虛拟機(每個虛拟機需要單獨配置設定獨占的記憶體、磁盤等資源),而Docker隻需要啟動N個隔離的容器,并将應用放到容器内即可。       下表總結了使用Docker容器技術與傳統虛拟機技術的特性比較。        

Docker學習筆記2: Docker 概述

下圖比較了Docker和常見虛拟機方式的不同之處。 傳統方式是在硬體層面實作虛拟化,需要有額外的虛拟機管理應用和虛拟機作業系統層。

Docker學習筆記2: Docker 概述

Docker容器是在作業系統層面實作虛拟化,直接複用本地主機的作業系統,是以更加輕量級.

三、什麼是Docker引擎(Engine)

Docker引擎是一個用戶端--伺服器應用,由如下主要元件組成:

  • 一個背景守護程序(daemon process.)
  • 一個REST API 指定特定的接口,程式可以使用這些接口告訴和指導守護程序做什麼.
  • 一個指令行端口(CLI),client.
Docker學習筆記2: Docker 概述

CLI使用Docker的REST API 來和Docker的守護程序互動,通過腳本或直接的CLI指令。 守護程序(dameon)建立和管理Docker對象(objects).Docker對象包括鏡像(images)、容器(containers)、網絡(networks)、資料卷(data volumes)等等. 注:docker通過開源的Apache 2.0 許可認證.

四、Docker的架構

Docker使用用戶端-伺服器(client-server)架構. Docker client 告訴Docker daemon 建立、運作、和分發你你的Docker容器. Docker client和daemon可以運作在同一個系統中,或者可以使用Docker client 和遠端的Docker  daemon 取得聯系。docker客服端和docker守護程序之間通過sockets 或者REST API 互動.

Docker學習筆記2: Docker 概述

1、Docker守護程序

如上圖所示,Docker守護程序運作在一台主機上,使用者不直接和守護程序互動,而是通過Docker用戶端互動.

2、Docker用戶端

Docker用戶端,實際是Docker的二進制程式,是主要的使用者與Docker的互動方式。它接收使用者指令,并與背後的Docker守護程序互動,如此來回往複.

3、Docker 内部(Inside)

要了解Docker内部情況,你需要知道如下三種資源:

  • Docker   images---Docker 鏡像
  • Docker   registries----Docker 注冊伺服器
  • Docker   containers-----Docker容器
3.1、Docker鏡像

       Docker鏡像類似于虛拟機鏡像,可以将它了解為一個面向Docker引擎的隻讀模闆,包含了檔案系統。        例如:一個鏡像可以隻包含一個完整的Ubuntu作業系統環境,可以把它稱為一個Ubuntu鏡像。鏡像也可以安裝了Apache應用程式(或使用者需要的其他軟體),可以把它稱為一個Apache鏡像。        鏡像是建立Docker容器的基礎。通過版本管理和增量的檔案系統,Docker提供了一套十分簡單的機制來建立和更新現有的鏡像,使用者甚至可以從網上下載下傳一個已經做好的應用鏡像,并通過簡單的指令可以直接使用.

3.2、Docker容器

Docker容器類似于一個輕量級的沙箱,Docker利用容器來運作和隔離應用。 容器是從鏡像建立的應用運作執行個體,可以将其啟動、開始、停止、删除,而這些容器都是互相隔離、互不可見的。 讀者可以把容器看做一個簡易版的Linux系統環境(這包括root使用者權限、程序空間、使用者空間和網絡空間等),以及運作在其中的應用程式打包而成的應有盒子。 鏡像自身是隻讀的。容器從鏡像啟動的時候,Docker會在鏡像的最上層建立一個可寫層,鏡像本身将保持不變.

3.3、注冊伺服器(Registry)

Docker注冊伺服器是存放倉庫的地方,其上往往存放過個倉庫。每個倉庫集中存放某一個類鏡像,往往包括多個鏡像檔案,可以通過不同的标簽(tag)來進行區分。根據所存儲的鏡像公開與否,Docker倉庫可以分為公開(Public)倉庫和私有(Private)倉庫兩種形式.                                                                                

Docker學習筆記2: Docker 概述

                                                                                                                               圖--倉庫和注冊伺服器

目前,最大的公開倉庫是Docker Hub,存放數量龐大的鏡像供使用者下載下傳.  使用者如果不希望公開分享自己的鏡像檔案,Docker也支援在本地網絡内建立一個隻能自己通路的私有倉庫。 當使用者建立了自己的鏡像之後就可以使用push指令将它上傳到指定的公有或者私有倉庫。這樣使用者下次使用者下次在另一台機器上使用該竟像時,隻需将其從倉庫上pull下來就可以了。