溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

docker鏡像的使用

發(fā)布時間:2020-06-03 21:23:58 來源:億速云 閱讀:318 作者:Leah 欄目:云計算

這篇文章的知識點包括:docker鏡像的安裝下載、docker鏡像分層以及docker鏡像的緩存特性,閱讀完整文相信大家對docker的鏡像有了一定的認(rèn)識。
下載鏡像(dockerfile的組成)
docker pull hello-world
docker鏡像的使用

Dockerfile的組成
1.》FROM:scratch   抓,撓(從零開始構(gòu)建)
2》COPY: hello /
3》CMD: [“/hello”]

Base鏡像
(基礎(chǔ)鏡像)
docker鏡像的使用
docker鏡像的使用

> ***個人理解:
> 用戶空間:rootfs
> 內(nèi)核空間 :bootfs
> kernel內(nèi)核
> 總體有七個部分:
> docker client,docker daemon,driver,libcontainer,
> docker container,graph,docker registry
> 
> docker是一個C/S的架構(gòu),用戶可以在客戶端輸入各種指令,客戶端負(fù)責(zé)接受請求并作出相應(yīng)的響應(yīng)返回給客戶。
> DockerClient
> DockerClient 負(fù)責(zé)接受并傳遞請求指令 。
> DockerDaemon
> 后臺運(yùn)行(不占用程序與端口)
> DockerDaemon的功能主要有兩個:(是一個守護(hù)進(jìn)程)
> 1.負(fù)責(zé)接受client的請求2.管理docker容器
> dockerdaemon的架構(gòu)主要可以分為兩部分:dockerserver和engine
> DockerServer作為服務(wù)端最主要的作用就是配合client端將請求指令接受過來,如圖所示,DockerServer主要分為三個部分:Http.server,routermux.server,Handler
> DockerServer運(yùn)行時會從一個名為mux的包中創(chuàng)建一個mux.Router路由器,然后為路由器中添加相關(guān)的路由項用于路由信息, 每個路由項由HTTP請求方法(get,post,put,delete)+URL+Handler三部分組成。
> DockerServer每收到一個請求就會生成一個goroutine然后進(jìn)行相應(yīng)的解析、匹配相應(yīng)的路由項最后會找到相匹配的Handler來處理,Handler處理玩請求之后給DockerClient返回響應(yīng)
> 2.Engine
> Engine是docker中的運(yùn)行引擎,存儲著大量的容器信息并管理著大部分job的執(zhí)行。
> 
> job是docker中的最小執(zhí)行單元,類似于unix中的進(jìn)程,也會有相應(yīng)的名字、參數(shù)、環(huán)境變量、標(biāo)準(zhǔn)輸入輸出、返回狀態(tài)等等。docker每進(jìn)行一次相應(yīng)的操作都會 生成一個相應(yīng)的Job,比如創(chuàng)建一個容器、下載一個文件等等都是由job完成的。
> DockerDriver
> DockerDriver是docker內(nèi)部的驅(qū)動模塊,負(fù)責(zé)容器內(nèi)部相關(guān)網(wǎng)絡(luò)、文件系統(tǒng)等的構(gòu)建
> 
> libcontainer
> libcontainer主要是對linux內(nèi)核的一些諸如namespace、cgroups、capabilities等特性做了封裝
> 
> Graph
> DockerRegistry(私有倉庫)
> Docker Container:運(yùn)行應(yīng)用程序的特定容器,是容器服務(wù)的交付實體***

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

容器:具體的運(yùn)行應(yīng)用程序的一個進(jìn)程,它里面包含應(yīng)用程序的各種依賴。

鏡像:創(chuàng)建容器的模板,根據(jù)不同配置的鏡像來創(chuàng)建不同的容器使用。鏡像和容器的關(guān)系可以理解為面向?qū)ο笾蓄惡蛯嵗龑ο蟮年P(guān)系。

倉庫:一個鏡像只可以創(chuàng)建一種類型的容器,鏡像多了就需要放到鏡像倉庫中存起來,倉庫有本地鏡像倉庫和公共鏡像倉庫,平時使用本地倉庫的鏡像,沒有的話去Registry hub公共鏡像倉庫下載。

Docker架構(gòu)

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

Docker架構(gòu)

Docker Client: 用戶通過Docker Client與Docker Daemon進(jìn)行通信,利用命令行發(fā)送創(chuàng)建鏡像、運(yùn)行容器之類的請求。

Docker Daemon:Docker Daemon是Docker架構(gòu)中一個常駐在后臺的系統(tǒng)進(jìn)程,接受并處理Docker Client發(fā)送的請求。該守護(hù)進(jìn)程在后臺啟動了一個Server,Server負(fù)責(zé)接受Docker Client發(fā)送的請求;然后通過路由與分發(fā)調(diào)度,找到相應(yīng)的Handler來執(zhí)行請求。

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

Driver: Driver是Docker架構(gòu)中的驅(qū)動模塊。通過Driver驅(qū)動,Docker可以實現(xiàn)對Docker容器執(zhí)行環(huán)境的定制。包含管理容器鏡像的graphdriver驅(qū)動,配置容器內(nèi)網(wǎng)絡(luò)環(huán)境的networkdriver驅(qū)動,execdriver用來創(chuàng)建和維護(hù)容器。

Docker Container:運(yùn)行應(yīng)用程序的特定容器,是容器服務(wù)的交付實體。

一般運(yùn)行流程為:用戶在Docker Client端通過命令行發(fā)送請求到Docker Daemon,Docker Daemon中的Server收到請求后,Engine會創(chuàng)建一個工作任務(wù)job,通過調(diào)用Driver模塊的各個驅(qū)動分別執(zhí)行不同的任務(wù),比如需要鏡像就調(diào)用graphdriver從鏡像倉庫下載鏡像,創(chuàng)建容器時也需要調(diào)用其它兩個驅(qū)動來配置網(wǎng)絡(luò)和創(chuàng)建并維護(hù)容器。最后生成運(yùn)行中的容器或者上傳鏡像到鏡像倉庫等。

容器應(yīng)用

當(dāng)想使用容器來跑自己的應(yīng)用程序時,首先需要明確應(yīng)用程序依賴的環(huán)境,如果本地有現(xiàn)成鏡像可以直接使用來運(yùn)行容器跑應(yīng)用,沒有的話可以通過docker pull去registry hub下載,或者自己創(chuàng)建所需要的鏡像。

可以使用dockerfile來創(chuàng)建鏡像,首先編輯一個dockerfile文件,其中

FROM 表示這個鏡像是基于哪個鏡像來建立

MAINTAINER 表示這個鏡像是由誰來維護(hù)

RUN 告訴鏡像要執(zhí)行的操作,比如更新或安裝一個軟件等,會新建一個鏡像層。

EXPOSE 表示暴露的端口。

ENV 表示配置環(huán)境變量

CMD 設(shè)置容器啟動后默認(rèn)執(zhí)行的命令及其參數(shù),這條命令會在容器啟動而且docker run沒有指定其它命令時運(yùn)行,如果docker run指定了其它命令,CMD指定的默認(rèn)命令將被忽略。

CMD有三種格式:

Exec格式:CMD [“executable”,“param1”,“param2”]
CMD [ “param1”,“param2”] 一般使用這個,為ENTRYPOINT提供默             認(rèn)參數(shù)
Shell格式:CMD command param1 param2
ENTRYPOINT 配置容器啟動時運(yùn)行的命令。與CMD不同的是,ENTRYPOINT的指令一定會被運(yùn)行,即使運(yùn)行docker run時指定了其它命令。

        ENTRYPOINT有兩種格式:

Exec格式:ENTRYPOINT [“executable”,“param1”,“param2”]
Shell格式:ENTRYPOINT command param1 param2
一般優(yōu)先使用 Exec 格式的 ENTRYPOINT 指令。CMD 可為 ENTRYPOINT 提供額外的默認(rèn)參數(shù),同時可利用 docker run 命令行替換默認(rèn)參數(shù)。

常用命令

Docker build 創(chuàng)建鏡像

Docker run  利用鏡像運(yùn)行容器

Docker image 關(guān)于鏡像的一系列操作

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

Docker push  上傳鏡像到鏡像倉庫

Docker container 執(zhí)行關(guān)于容器的一系列操作

Docker stats 實時監(jiān)控該節(jié)點容器的資源使用情況

docker鏡像的使用
鏡像的分層
1》dockerfile的書寫格式為:Dockerfile
2》FROM:構(gòu)建鏡像有兩種方式,一種是scratch(從零構(gòu)建),另一種可以基于某個鏡像開始構(gòu)建。
3》鏡像所運(yùn)行的操作,(用戶所期望的)

vim Dockerfile
docker鏡像的使用
運(yùn)行一下
docker  build  -t centos7-vim-net-tools:12-11 .
. 點代表在當(dāng)前目錄自動查找Dockerfile文件
docker鏡像的使用

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

Dockerfile鏡像分層總結(jié):
鏡像是容器的基石,容器是鏡像運(yùn)行后的實例,當(dāng)鏡像運(yùn)行為容器后,對鏡像的所有數(shù)據(jù)僅有只讀權(quán)限,如果需要對鏡像源文件進(jìn)行修改或刪除操做,此時實在容器層(可寫層)進(jìn)行的,用到了cow(copy on write)寫時復(fù)制機(jī)制

Docker鏡像的緩存特性:
一個目錄最好只有一個Dockerfile文件
創(chuàng)建一個新的dockerfile文件
docker鏡像的使用
運(yùn)行一下
docker build  -t  new-centos .
如果在相同的層有相同的鏡像,看可以不必在去下載,可以直接使用緩存。
即使相同的鏡像,在不同的層也會去下載

查看鏡像的歷史
docker history centos7-vim-net-tools:12-11
docker鏡像的使用
docker history new-centos:latest
docker鏡像的使用
Mkdir  test1 在創(chuàng)建一個dockerfile
docker鏡像的使用

即使鏡像操做一樣,也必須是在同一層才可以使用dockerfile的緩存特性。
如果制作鏡像過程中,不想使用緩存,可以加--no-cache選項。

看完上述內(nèi)容,你們對docker鏡像有進(jìn)一步的了解嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI