docker的架構,鏡像分層特性,dockerfile緩存特性

Docker網站:
https://hub.docker.com/ 
Docker鏡像分層的概念:
Docker的最小鏡像
docker的架構,鏡像分層特性,dockerfile緩存特性
下載鏡像(dockerfile的組成)
docker pull hello-world
docker的架構,鏡像分層特性,dockerfile緩存特性linux

Dockerfile的組成
1.》FROM:scratch 抓,撓(從零開始構建)
2》COPY: hello /
3》CMD: [「/hello」]docker

Base鏡像
(基礎鏡像)
docker的架構,鏡像分層特性,dockerfile緩存特性
docker的架構,鏡像分層特性,dockerfile緩存特性vim

> ***我的理解:
> 用戶空間:rootfs
> 內核空間 :bootfs
> kernel內核
> 整體有七個部分:
> docker client,docker daemon,driver,libcontainer,
> docker container,graph,docker registry
> 
> docker是一個C/S的架構,用戶能夠在客戶端輸入各類指令,客戶端負責接受請求並做出相應的響應返回給客戶。
> DockerClient
> DockerClient 負責接受並傳遞請求指令 。
> DockerDaemon
> 後臺運行(不佔用程序與端口)
> DockerDaemon的功能主要有兩個:(是一個守護進程)
> 1.負責接受client的請求2.管理docker容器
> dockerdaemon的架構主要能夠分爲兩部分:dockerserver和engine
> DockerServer做爲服務端最主要的做用就是配合client端將請求指令接受過來,如圖所示,DockerServer主要分爲三個部分:Http.server,routermux.server,Handler
> DockerServer運行時會從一個名爲mux的包中建立一個mux.Router路由器,而後爲路由器中添加相關的路由項用於路由信息, 每一個路由項由HTTP請求方法(get,post,put,delete)+URL+Handler三部分組成。
> DockerServer每收到一個請求就會生成一個goroutine而後進行相應的解析、匹配相應的路由項最後會找到相匹配的Handler來處理,Handler處理玩請求以後給DockerClient返回響應
> 2.Engine
> Engine是docker中的運行引擎,存儲着大量的容器信息並管理着大部分job的執行。
> 
> job是docker中的最小執行單元,相似於unix中的進程,也會有相應的名字、參數、環境變量、標準輸入輸出、返回狀態等等。docker每進行一次相應的操做都會 生成一個相應的Job,好比建立一個容器、下載一個文件等等都是由job完成的。
> DockerDriver
> DockerDriver是docker內部的驅動模塊,負責容器內部相關網絡、文件系統等的構建
> 
> libcontainer
> libcontainer主要是對linux內核的一些諸如namespace、cgroups、capabilities等特性作了封裝
> 
> Graph
> DockerRegistry(私有倉庫)
> Docker Container:運行應用程序的特定容器,是容器服務的交付實體***

**總結:文檔(網上)
Docker核心概念
**
容器技術的核心概念有容器(container)、鏡像(image)、倉庫(registry)三個。

容器:具體的運行應用程序的一個進程,它裏面包含應用程序的各類依賴。

鏡像:建立容器的模板,根據不一樣配置的鏡像來建立不一樣的容器使用。鏡像和容器的關係能夠理解爲面向對象中類和實例對象的關係。

倉庫:一個鏡像只能夠建立一種類型的容器,鏡像多了就須要放到鏡像倉庫中存起來,倉庫有本地鏡像倉庫和公共鏡像倉庫,平時使用本地倉庫的鏡像,沒有的話去Registry hub公共鏡像倉庫下載。

Docker架構

Docker框架主要由Docker Client、Docker Daemon、Docker Registry、Driver、Docker Container五個模塊組成,另外還有Graph和Libcontainer兩個輔助模塊,以下圖所示:

Docker架構

Docker Client: 用戶經過Docker Client與Docker Daemon進行通訊,利用命令行發送建立鏡像、運行容器之類的請求。

Docker Daemon:Docker Daemon是Docker架構中一個常駐在後臺的系統進程,接受並處理Docker Client發送的請求。該守護進程在後臺啓動了一個Server,Server負責接受Docker Client發送的請求;而後經過路由與分發調度,找到相應的Handler來執行請求。

Docker Registry:存儲容器鏡像的倉庫。

Driver: Driver是Docker架構中的驅動模塊。經過Driver驅動,Docker能夠實現對Docker容器執行環境的定製。包含管理容器鏡像的graphdriver驅動,配置容器內網絡環境的networkdriver驅動,execdriver用來建立和維護容器。

Docker Container:運行應用程序的特定容器,是容器服務的交付實體。

通常運行流程爲:用戶在Docker Client端經過命令行發送請求到Docker Daemon,Docker Daemon中的Server收到請求後,Engine會建立一個工做任務job,經過調用Driver模塊的各個驅動分別執行不一樣的任務,好比須要鏡像就調用graphdriver從鏡像倉庫下載鏡像,建立容器時也須要調用其它兩個驅動來配置網絡和建立並維護容器。最後生成運行中的容器或者上傳鏡像到鏡像倉庫等。

容器應用

當想使用容器來跑本身的應用程序時,首先須要明確應用程序依賴的環境,若是本地有現成鏡像能夠直接使用來運行容器跑應用,沒有的話能夠經過docker pull去registry hub下載,或者本身建立所須要的鏡像。

可使用dockerfile來建立鏡像,首先編輯一個dockerfile文件,其中

FROM 表示這個鏡像是基於哪一個鏡像來創建

MAINTAINER 表示這個鏡像是由誰來維護

RUN 告訴鏡像要執行的操做,好比更新或安裝一個軟件等,會新建一個鏡像層。

EXPOSE 表示暴露的端口。

ENV 表示配置環境變量

CMD 設置容器啓動後默認執行的命令及其參數,這條命令會在容器啓動並且docker run沒有指定其它命令時運行,若是docker run指定了其它命令,CMD指定的默認命令將被忽略。

CMD有三種格式:

Exec格式:CMD [「executable」,「param1」,「param2」]
CMD [ 「param1」,「param2」] 通常使用這個,爲ENTRYPOINT提供默             認參數
Shell格式:CMD command param1 param2
ENTRYPOINT 配置容器啓動時運行的命令。與CMD不一樣的是,ENTRYPOINT的指令必定會被運行,即便運行docker run時指定了其它命令。

        ENTRYPOINT有兩種格式:

Exec格式:ENTRYPOINT [「executable」,「param1」,「param2」]
Shell格式:ENTRYPOINT command param1 param2
通常優先使用 Exec 格式的 ENTRYPOINT 指令。CMD 可爲 ENTRYPOINT 提供額外的默認參數,同時可利用 docker run 命令行替換默認參數。

經常使用命令

Docker build 建立鏡像

Docker run  利用鏡像運行容器

Docker image 關於鏡像的一系列操做

Docker pull  從鏡像倉庫下載鏡像到本地倉庫

Docker push  上傳鏡像到鏡像倉庫

Docker container 執行關於容器的一系列操做

Docker stats 實時監控該節點容器的資源使用狀況

docker的架構,鏡像分層特性,dockerfile緩存特性
鏡像的分層
1》dockerfile的書寫格式爲:Dockerfile
2》FROM:構建鏡像有兩種方式,一種是scratch(從零構建),另外一種能夠基於某個鏡像開始構建。
3》鏡像所運行的操做,(用戶所指望的)

vim Dockerfile
docker的架構,鏡像分層特性,dockerfile緩存特性
運行一下
docker build -t centos7-vim-net-tools:12-11 .
. 點表明在當前目錄自動查找Dockerfile文件
docker的架構,鏡像分層特性,dockerfile緩存特性centos

注意:鏡像的查看順序,從上到下

Dockerfile鏡像分層總結:
鏡像是容器的基石,容器是鏡像運行後的實例,當鏡像運行爲容器後,對鏡像的全部數據僅有隻讀權限,若是須要對鏡像源文件進行修改或刪除操作,此時實在容器層(可寫層)進行的,用到了cow(copy on write)寫時複製機制

Docker鏡像的緩存特性:
一個目錄最好只有一個Dockerfile文件
建立一個新的dockerfile文件
docker的架構,鏡像分層特性,dockerfile緩存特性
運行一下
docker build -t new-centos .
若是在相同的層有相同的鏡像,看能夠沒必要在去下載,能夠直接使用緩存。
即便相同的鏡像,在不一樣的層也會去下載緩存

查看鏡像的歷史
docker history centos7-vim-net-tools:12-11
docker的架構,鏡像分層特性,dockerfile緩存特性
docker history new-centos:latest
docker的架構,鏡像分層特性,dockerfile緩存特性
Mkdir test1 在建立一個dockerfile
docker的架構,鏡像分層特性,dockerfile緩存特性網絡

即便鏡像操作同樣,也必須是在同一層纔可使用dockerfile的緩存特性。
若是製做鏡像過程當中,不想使用緩存,能夠加--no-cache選項。
架構

相關文章
相關標籤/搜索