天天看點

docker三要素以及架構

docker由三部分組成:image(鏡像)、容器(container)、倉庫(repository).

1.image

Image是一個隻讀模闆,其中包含有關建立Docker容器的說明;Image可以用來建立容器且一個鏡像可以創造多個容器。通常,一個Image基于另一個Image,并帶有一些額外的自定義。通過引入分層技術,可以增加鏡像複用度,減少磁盤占用;同時可以實作差分上傳下載下傳,加快鏡像pull、push性能。

2.container

Docker利用容器(container)獨立運作的一個或者一組應用。容器是利用鏡像建立的運作執行個體(相對于Java中的類和對象的概念)。容器可以被啟動、開始、停止、删除。每個容器都是互相隔離的,保證安全的平台。可以把容器看做是一個簡易版的Linux環境 (包括root使用者名權限、程序空間、使用者空間和網絡空間等)和運作在其中的應用程式。

  容器的定義和鏡像幾乎是一模一樣的,也是一堆層的統一視角, 唯一差別的是容器的最上面那一層是可讀可寫的。

  容器是鏡像啟動或執行階段。Docker中的每個容器都包含了一個軟體鏡像,該鏡像可以被建立、啟動、關閉、重新開機和銷毀。

3.repository

集中存放Image的場所,Repository很容易和下面說的Registry(倉庫注冊伺服器)混淆。通俗地說,它們的關系是Registry上往往存放着多個Repository,每個Repository存又放着一大堆Images,每個Image存在不同的标簽(Tag);使用者可以從通過注冊伺服器從倉庫拉取(帶有某個tag的)Image,進而建立Container。

docker三要素以及架構

docker-registry

  Docker registries是指存儲Docker Image的地方。如Docker Hub是任何人都可以使用的公共registries,這一性質類似于Github。Docker預設配置為在Docker Hub上查找你所需要的Image。注意和Repository進行區分

unionfs

UnionFS(聯合檔案系統)是一種分層、輕量級并且高性能的檔案系統,它支援對檔案系統的修改作為一次送出來一層層的疊加,同時可以将不同目錄挂載到同一個虛拟檔案系統下;UnionFS一次同時加載多個檔案系統,但從外面看起來,隻能看到一個檔案系統,聯合加載會把各層檔案系統疊加起來,這樣最終的檔案系統會包含所有底層的檔案和目錄。UnionFS是Docker鏡像的基礎,鏡像通過分層進行繼承,基于基礎鏡像(images that no parent image),可以制作各種具體應用的鏡像。

  是以,我們會想,那基礎鏡像是什麼呢?答案就是bootfs(boot file system),其主要包含bootloader和kernel。bootloader主要是引導、加載Kernel。這一層和典型的Linux/Unix系統是一樣的,當boot加載完成之後整個核心就會在記憶體中了,此時記憶體的使用權已由bootfs交給Kernel,此時系統也會解除安裝bootfs。

  ok,那在bootfs之上,又是什麼呢?其實也和典型Linux/Unix一樣,即是系統中的/dev、/proc、/bin、/etc等标準目錄和檔案,這些檔案稱為rootfs(root filesystem),是各種不同作業系統的發行版,如Centos、Ubuntu.Docker就是這樣一個建立精簡OS的工具,具有靈活遷移、部署的特性,是以廣受業界歡迎。其rootfs可以很小,隻需要包括最基本的指令、工具和程式庫,因為底層直接使用Host的kernel。

容器在核心中支援的兩種重要技術:

  docker本質就是主控端的一個程序,docker是通過namespace實作資源隔離,通過cgroup實作資源限制,通過寫時複制技術(copy-on-write)實作了高效的檔案操作(類似虛拟機的磁盤比如配置設定500g并不是實際占用實體磁盤500g)

    1)namespaces 名稱空間

docker三要素以及架構

    2)control Group 控制組

      cgroup的特點是:       

        cgroup的api以一個僞檔案系統的實作方式,使用者的程式可以通過檔案系統實作cgroup的元件管理

        cgroup的元件管理操作單元可以細粒度到線程級别,另外使用者可以建立和銷毀cgroup,進而實作資源載配置設定和再利用

        所有資源管理的功能都以子系統的方式實作,接口統一子任務建立之初與其父任務處于同一個cgroup的控制組

       四大功能:        

        資源限制:可以對任務使用的資源總額進行限制

        優先級配置設定:通過配置設定的cpu時間片數量以及磁盤IO帶寬大小,實際上相當于控制了任務運作優先級

        資源統計:可以統計系統的資源使用量,如cpu時長,記憶體用量等

        任務控制:cgroup可以對任務執行挂起、恢複等操作

docker架構:

docker三要素以及架構

 

docker daemon就是docker的守護程序即server端,可以是遠端的,也可以是本地的,這個不是C/S架構嗎,用戶端Docker client 是通過rest api進行通信

    docker cli 用來管理容器和鏡像,用戶端提供一個隻讀鏡像,然後通過鏡像可以建立多個容器,這些容器可以隻是一個RFS(Root file system根檔案系統),也可以ishi一個包含了使用者應用的RFS,容器再docker client中隻是要給程序,兩個程序之間互不可見

    使用者不能與server直接互動,但可以通過與容器這個橋梁來互動,由于是作業系統級别的虛拟技術,中間的損耗幾乎可以不計

docker run 運作流程圖:

docker三要素以及架構