天天看點

Docker容器技術-基礎與架構

本文介紹Docker容器技術的概要和架構

一、什麼是容器

容器是對應用程式及其依賴關系的封裝。

1.容器的優點

  • 容器與主機的作業系統共享資源,提高了效率,性能損耗低
  • 容器具有可移植性
  • 容器是輕量的,可同時運作數十個容器,模拟分布式系統
  • 不必花時間在配置和安裝上,無需擔心系統的改動,以及依賴關系是否滿足

2.容器與虛拟機

運作在同一主機的3個虛拟機

Docker容器技術-基礎與架構

運作在同一主機的3個容器

Docker容器技術-基礎與架構

差別:

A.容器隻能運作與主機一樣的核心

B.程式庫可以共用

C.容器中執行的程序與主機的程序等價(沒有虛拟機管理程式的損耗)

D.隔離能力,虛拟機更高(将容器運作在虛拟機中)

3.容器與Docker

Docker利用現有的Linux容器技術,以不同方式将其封裝及擴充(通過提供可移植的鏡像及友好的接口),來建立及釋出方案。

兩部分:

  • 負責建立與運作容器的Docker引擎
  • 用來釋出容器的雲服務Docker Hub

二、Docker架構

1.總架構

Docker容器技術-基礎與架構

主要子產品:

DockerClient(與Daemon建立通信,發起容器的管理請求)

DockerDaemon(接收Client請求,處理請求)

Docker Regisrty(鏡像管理)

Graph(存儲鏡像)

Drvier(鏡像管理驅動)

libcontainer(系統核心特性,提供完整、明确的接口給Daemon)

Docker Container

2.各子產品功能及實作

1)Docker Client

Docker架構中使用者與Docker Daemon建立通信的用戶端。

使用者可以使用可執行檔案docker作為Docker Client,發起Docker容器的管理請求。

三種方式建立通信:

tcp://host:port

unix://path_to_socket

fd://socketfd

Docker Client發送容器管理請求後,請求由Docker Daemon接收并處理,當Docker Client接收到傳回的請求響應并做簡單處理後,Docker Client一次完整的生命周期就結束了。

2)Docker Daemon

常駐在背景的系統程序。

Docker容器技術-基礎與架構

主要作用:

接收并處理Docker Client發送的請求

管理所有的Docker容器

Docker Daemon運作時,會在背景啟動一個Server,Server負責接收Docker Client發送的請求;接收請求後,Server通過路由與分發排程,找到相應的Handler來處理請求。

三部分組成:

A.Docker Server

專門服務于Docker Client,接收并排程分發Client請求。

Docker容器技術-基礎與架構

Server通過包gorilla/mux建立mux。Router路由器,提供請求的路由功能,每一個路由項由HTTP請求方法(PUT、POST、GET、DELETE)、URL和Handler組成。

每一個Client請求,Server均會建立一個全新的goroutine來服務,在goroutine中,Server首先讀取請求内容,然後做請求解析工作,接着比對相應的路由項,随後調用相應的Handler來處理,最後Handler處理完請求後給Client回複響應。

B.Engine

核心子產品,運作引擎。

存儲着大量容器資訊,管理着Docker大部分Job的執行。

handlers對象:

存儲衆多特定Job各自的處理方法handler。

例如:

{"create":daemon.ContainerCreate,}

當執行名為"create"的Job時,執行的是daemon.ContainerCreate這個handler。

C.Job

Engine内部最基本的執行單元,Daemon完成的每一項工作都展現為一個Job。

3)Docker Registry

存儲容器鏡像(Docker Image)的倉庫。

Docker Image是容器建立時用來初始化容器rootfs的檔案系統内容。

  • 搜尋鏡像
  • 下載下傳鏡像
  • 上傳鏡像

方式:

  • 公有Registry
  • 私有Registry

4)Graph

容器鏡像的保管者。

Docker容器技術-基礎與架構

5)Driver

驅動子產品,通過Driver驅動,Docker實作對Docker容器運作環境的定制,定制的次元包括網絡、存儲、執行方式。

Docker容器技術-基礎與架構

作用:

将與Docker容器有關的管理從Daemon的所有邏輯中區分開。

實作:

A.graphdriver

用于完成容器鏡像管理。

初始化前的四種檔案系統或類檔案系統的驅動在Daemon中注冊:

aufs、btrfs、devmapper用于容器鏡像的管理

vfs用于容器volume的管理

Docker容器技術-基礎與架構

B.networkdriver

完成Docker容器網絡環境的配置。

Docker容器技術-基礎與架構

C.execdriver

執行驅動,負責建立容器運作時的命名空間,負責容器資源使用的統計與限制,負責容器内部程序的真正運作等。

Daemon啟動過程中加載ExecDriverflag參數在配置檔案中預設設為native。

Docker容器技術-基礎與架構

6)libcontainer

使用Go語言設計的庫,不依靠任何依賴,直接通路核心中與容器相關的系統調用。

Docker容器技術-基礎與架構

7)Docker Container

服務傳遞的最終展現。

使用者對Docker容器的配置:

  • 通過指定容器鏡像,使得Docker容器可以自定義rootfs等檔案系統;
  • 通過指定實體資源的配額,使得Docker容器使用受限的資源;
  • 通過配置容器網絡及其安全政策,使得Docker容器擁有獨立且安全的網絡環境;

    *通過指定容器的運作指令,使得Docker容器執行指定的任務。

繼續閱讀