国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Docker鏡像細(xì)節(jié)

xiaokai / 1358人閱讀

摘要:簡(jiǎn)單來(lái)說(shuō)是鏡像的源碼。例如,的鏡像鏡像,在中是一個(gè)基礎(chǔ)鏡像的鏡像也是鏡像那么鏡像和共享同一個(gè)基礎(chǔ)鏡像層,提高了存儲(chǔ)效率。

前言
只有光頭才能變強(qiáng)。
文本已收錄至我的GitHub倉(cāng)庫(kù),歡迎Star:https://github.com/ZhongFuCheng3y/3y

回顧前面:

為什么需要Docker?

Docker入門(mén)為什么可以這么簡(jiǎn)單?

前面兩篇已經(jīng)講解了為什么需要Docker這項(xiàng)技術(shù),以及解釋了Docker的基本概念/術(shù)語(yǔ),使用Docker成功運(yùn)行Tomcat~

在上篇也同樣留下一個(gè)問(wèn)題:我們知道Tomcat運(yùn)行起來(lái)需要Java的支持,那么我們?cè)贒ockerHub拉取下來(lái)的Tomcat鏡像是不是也有Java環(huán)境呢?

所以,這篇主要來(lái)講講Docker鏡像相關(guān)的知識(shí)點(diǎn)!

一、簡(jiǎn)單了解Dockerfile
Dockerfile是用來(lái)構(gòu)建Docker鏡像的文件,是由一系列命令和參數(shù)構(gòu)成的腳本

簡(jiǎn)單來(lái)說(shuō):Dockerfile是鏡像的源碼。

上一篇我們pull了一份Tomcat的鏡像,我們也可以去看看它的Dockerfile長(zhǎng)的什么樣:

我們隨便點(diǎn)進(jìn)去一個(gè)看一下:

我們?cè)贒ockerfile的第一行就可以發(fā)現(xiàn)FROM openjdk:8-jre,所以可以確定的是:在DockerHub拉取下來(lái)的Tomcat鏡像一定有Java環(huán)境!

在這里我們先不說(shuō)如何閱讀/編寫(xiě)Dockerfile文件,先了解到Dockerfile是鏡像的源碼即可

簡(jiǎn)單來(lái)說(shuō):通過(guò)Dockerfile文件可以知道我們拉取下來(lái)的鏡像究竟是怎么構(gòu)建的。

二、解除鏡像的疑惑

我們知道Docker Hub有很多常用的鏡像,比如說(shuō)Centos。我們?nèi)?b>pull一個(gè)下來(lái)看看Docker中的Centos長(zhǎng)啥樣:

我們可以發(fā)現(xiàn)的是:TomcatSIZE竟然比Centos還要大!但按我們常規(guī)的想法,Centos的鏡像可能是3或4GB(現(xiàn)在200M),Tomcat的鏡像可能就200M(現(xiàn)在400M)。這是為什么呢??

如果我們?cè)?b>pull的時(shí)候觀察得比較仔細(xì)的話,可以發(fā)現(xiàn)pull會(huì)拉下很多鏡像:

完全pull下來(lái)的之后,我們?nèi)绻褂?b>docker images只能查看到最終的鏡像:

如果我們使用docker images -a 命令的話,可以把中間層鏡像都查出來(lái):

理想效果:(在鏡像列表里邊除了tomcat和centos應(yīng)該還夾雜著名為的鏡像)

遺憾的是:博主一直沒(méi)測(cè)出效果來(lái),也就是我的鏡像列表里沒(méi)有的鏡像(懷疑是版本的問(wèn)題,我的版本是Docker版本是18.09.1,Centos的版本是CentOS Linux release 7.3.1611 。如果知道具體原因的不妨在評(píng)論區(qū)下告訴我)

Emmm,我們可以使用history命令來(lái)看看,可以發(fā)現(xiàn)Tomcat包含很多個(gè)鏡像層

還可以發(fā)現(xiàn)一點(diǎn):Dockerfile有多少條命令,那就有多少個(gè)鏡像層(不信你數(shù)數(shù))

說(shuō)了那么多,就想讓大家知道:我們拉取下來(lái)的鏡像實(shí)際上是由很多中間層鏡像組成的。

再結(jié)合我們上一篇Docker入門(mén)為什么可以這么簡(jiǎn)單?,在解決Tomcat啟動(dòng)時(shí)一直卡住問(wèn)題時(shí),能夠發(fā)現(xiàn)的是,我們可以使用cd, ls等基礎(chǔ)命令,但無(wú)法使用vi命令(需要我自己去下載)。

我們可以推斷出,pull下來(lái)的鏡像由很多層鏡像組成【這些鏡像都是精簡(jiǎn)過(guò)的(甚至連vi命令都不支持)】

因?yàn)?b>Tomcat鏡像要的基礎(chǔ)環(huán)境比Centos鏡像要多,所以Tomcat鏡像的SIZECentos要大

三、Docker鏡像的特點(diǎn)

關(guān)于Docker鏡像,有以下特點(diǎn):

Dockerfile生成

呈現(xiàn)層級(jí)結(jié)構(gòu)

每層鏡像包含:鏡像文件以及鏡像json元數(shù)據(jù)信息

圖像來(lái)源:http://open.daocloud.io/allen-tan-docker-xi-lie-zhi-shen-ke-li-jie-docker-jing-xiang-da-xiao/
3.1鏡像呈現(xiàn)層級(jí)結(jié)構(gòu)

聯(lián)合文件系統(tǒng)(UnionFS)是實(shí)現(xiàn)Docker鏡像的技術(shù)基礎(chǔ)。在Docker中一般使用是AUFS(Another Union File System或Advanced Multilayered Unification File System)【具體還是得看宿主機(jī)用的什么系統(tǒng)】。

在搜索中文資料的時(shí)候,常常會(huì)發(fā)現(xiàn)有類似的解釋:

“AUFS是一種 Union FS, 簡(jiǎn)單來(lái)說(shuō)就是“支持將不同目錄掛載到同一個(gè)虛擬文件系統(tǒng)下的文件系統(tǒng)”, AUFS支持為每一個(gè)成員目錄設(shè)定只讀(Rreadonly)、讀寫(xiě)(Readwrite)和寫(xiě)(Whiteout-able)權(quán)限。Union FS 可以將一個(gè)Readonly的Branch和一個(gè)Writeable的Branch聯(lián)合在一起掛載在同一個(gè)文件系統(tǒng)下”。

看得我一頭霧水....后來(lái)去官方文檔介紹AUFS:

AUFS is a union filesystem, which means that it layers multiple directories on a single Linux host and presents them as a single directory. These directories are called branches in AUFS terminology, and layers in Docker terminology

說(shuō)白了,還是可以理解成:Docker的鏡像的基礎(chǔ)是聯(lián)合文件系統(tǒng),它支持將文件系統(tǒng)中的修改信息作為一次提交,并層層疊加,外界看到的是最外層的鏡像。(比如外界只看到Tomcat鏡像,而中間疊加了很多層鏡像)

(這里只是拿AUFS說(shuō)明,Docker實(shí)際上支持很多存儲(chǔ)驅(qū)動(dòng),比如還有devicemapper,overlay2(Ubuntu的14.04.4或更高版本,16.04或更高版本), overlay,zfs

https://docs.docker-cn.com/engine/userguide/storagedriver/selectadriver/

3.1.1鏡像繼承(共享)

Docker鏡像可以通過(guò)分層來(lái)進(jìn)行繼承。

例如,hello-world的Dockerfile鏡像FROM scratch鏡像,scratch在Docker中是一個(gè)基礎(chǔ)鏡像

FROM scratch
COPY hello /
CMD ["/hello"]

Centos的Dockerfile鏡像也是FROM scratch鏡像:

FROM scratch
ADD centos-7-docker.tar.xz /

LABEL org.label-schema.schema-version="1.0" 
    org.label-schema.name="CentOS Base Image" 
    org.label-schema.vendor="CentOS" 
    org.label-schema.license="GPLv2" 
    org.label-schema.build-date="20181205"

CMD ["/bin/bash"]

那么Centos鏡像和hello-world共享同一個(gè)基礎(chǔ)鏡像層scratch,提高了存儲(chǔ)效率。

再說(shuō)個(gè)例子,比如我們有一個(gè)Centos鏡像,這個(gè)鏡像大小是202M。然后,我們基于Centos鏡像手動(dòng)往里邊添加一個(gè)Tomcat(假設(shè)這個(gè)Tomcat的大小是300M),生成一個(gè)鏡像,總大小就是502M了。

如果僅僅是單純的累加這兩個(gè)鏡像的大?。?b>202M+502M=704M,但是由于鏡像復(fù)用的存在,實(shí)際占用的磁盤(pán)空間大小是:202M+300M=502M

AUFS uses the Copy-on-Write (CoW) strategy to maximize storage efficiency and minimize overhead。

如果想要了解COW,不妨閱讀我之前寫(xiě)過(guò)的文章:

COW奶牛!Copy On Write機(jī)制了解一下

CopyOnWriteArrayList你都不知道,怎么拿offer?

3.2json文件

Docker每一層鏡像的json文件,都扮演著一個(gè)非常重要的角色,其主要的作用如下:

記錄 Docker 鏡像中與容器動(dòng)態(tài)信息相關(guān)的內(nèi)容

記錄父子 Docker 鏡像之間真實(shí)的差異關(guān)系

彌補(bǔ) Docker 鏡像內(nèi)容的完整性與動(dòng)態(tài)內(nèi)容的缺失

Docker鏡像的json文件可以認(rèn)為是鏡像的元數(shù)據(jù)信息

最后

今天簡(jiǎn)單地聊了一下Docker鏡像的一些細(xì)節(jié),但沒(méi)去深入了解,想要繼續(xù)深入的同學(xué)還得通過(guò)官方文檔等途徑去學(xué)習(xí)哈。

參考資料:

Allen 談 Docker

http://open.daocloud.io/tag/allen-tan-docker/

官方文檔介紹AUFS

https://docs.docker-cn.com/engine/userguide/storagedriver/aufs-driver/#example-image-and-container-on-disk-constructs

Docker核心實(shí)現(xiàn)技術(shù)(命名空間&控制組&聯(lián)合文件系統(tǒng)&Linux網(wǎng)絡(luò)虛擬化支持)

https://www.cnblogs.com/wade-luffy/p/6589254.html#_label3

Docker聯(lián)合文件系統(tǒng)Union File System

http://www.dockerinfo.net/1753.html

樂(lè)于輸出干貨的Java技術(shù)公眾號(hào):Java3y。公眾號(hào)內(nèi)有200多篇原創(chuàng)技術(shù)文章、海量視頻資源、精美腦圖,不妨來(lái)關(guān)注一下!

覺(jué)得我的文章寫(xiě)得不錯(cuò),不妨點(diǎn)一下!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/28090.html

相關(guān)文章

  • 容器和容器鏡像的區(qū)別,您真的了解嗎

    摘要:我們首先來(lái)看容器和容器鏡像。容器和容器鏡像一樣,也是若干層的疊加,唯一區(qū)別是所有只讀層的最上面一層,是一層可讀可寫(xiě)層,如上圖綠色圖例所示。希望這篇文章能幫助大家理解容器和容器鏡像的區(qū)別。 很多剛剛接觸容器技術(shù)的朋友,不容易弄清楚容器,容器鏡像和Docker這幾個(gè)詞的區(qū)別和聯(lián)系。 showImg(https://segmentfault.com/img/remote/1460000017...

    zengdongbao 評(píng)論0 收藏0
  • 一種 Dockerize 應(yīng)用的簡(jiǎn)單方式

    摘要:為了證明模板,我們可以使用環(huán)境變量配置讓這個(gè)變成一個(gè)更通用的代理服務(wù)器。我們將定義環(huán)境變量作為一個(gè)站點(diǎn)的代理。當(dāng)這個(gè)容器使用這個(gè)環(huán)境變量啟動(dòng),將使用它來(lái)生成一個(gè)的路徑。 一種 Dockerize 應(yīng)用的簡(jiǎn)單方式 標(biāo)簽(空格分隔): Docker dockerize 作者是 jasonwilder。原文地址是 A Simple Way to Dockerize Applica...

    ddongjian0000 評(píng)論0 收藏0
  • Docker從入門(mén)到放棄-初學(xué)者困惑

    摘要:進(jìn)入發(fā)現(xiàn)運(yùn)行鏡像的容器有可能也是一個(gè)系統(tǒng)。每次使用都會(huì)創(chuàng)建一個(gè)容器,如果出現(xiàn)已經(jīng)存在的提示,請(qǐng)使用去移除這個(gè)容器。使用可以獲取權(quán)限容器如何查看準(zhǔn)確說(shuō)如何進(jìn)入到容器。這個(gè)就表示啟動(dòng)容器后啟動(dòng)保證有個(gè)進(jìn)行在運(yùn)行。 前言 這篇文章采用自問(wèn)自答的方式記錄自己的接觸Docker的所想與困惑. 學(xué)習(xí)方式 菜鳥(niǎo)教程過(guò)一遍 -> 實(shí)戰(zhàn)總結(jié) -> Docker官網(wǎng)查找細(xì)節(jié) 基礎(chǔ)知識(shí) Docker搜索鏡...

    yy13818512006 評(píng)論0 收藏0
  • Angular 容器部署

    摘要:很多人反應(yīng)很難訪問(wèn),所以轉(zhuǎn)移到阿里云服務(wù)器上,因此做了一次完整的容器部署。在容器化過(guò)程中,我們并未配置任何等,只是保留服務(wù)所需的配置項(xiàng)而已,而這一部分我們可以放在反向代理層完成。 很多人反應(yīng)很難訪問(wèn) Github Page,所以 ng-alain.com 轉(zhuǎn)移到阿里云服務(wù)器上,因此做了一次完整的 Angular 容器部署。 以下我會(huì)闡述 ng-alain 整個(gè)過(guò)程,其中包括 Docke...

    tracy 評(píng)論0 收藏0
  • Angular 容器部署

    摘要:很多人反應(yīng)很難訪問(wèn),所以轉(zhuǎn)移到阿里云服務(wù)器上,因此做了一次完整的容器部署。在容器化過(guò)程中,我們并未配置任何等,只是保留服務(wù)所需的配置項(xiàng)而已,而這一部分我們可以放在反向代理層完成。 很多人反應(yīng)很難訪問(wèn) Github Page,所以 ng-alain.com 轉(zhuǎn)移到阿里云服務(wù)器上,因此做了一次完整的 Angular 容器部署。 以下我會(huì)闡述 ng-alain 整個(gè)過(guò)程,其中包括 Docke...

    alighters 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<