Docker鏡像管理常用操作代碼示例
鏡像也是docker的核心組件之一,鏡像時(shí)容器運(yùn)行的基礎(chǔ),容器是鏡像運(yùn)行后的形態(tài)。總體來(lái)說(shuō),鏡像是一個(gè)包含程序運(yùn)行必要以來(lái)環(huán)境和代碼的只讀文件,它采用分層的文件系統(tǒng),將每一層的改變以讀寫層的形式增加到原來(lái)的只讀文件上。
鏡像與容器的關(guān)系
前文已經(jīng)向讀者介紹過(guò)容器的使用了,細(xì)心的讀者可能已經(jīng)發(fā)現(xiàn),容器在啟動(dòng)或者創(chuàng)建時(shí),必須指定一個(gè)鏡像的名稱或者id,其實(shí),這時(shí)鏡像所扮演的角色就是容器的模版,不同的鏡像可以構(gòu)造出不同的容器。如下命令:
docker run -itd --name nginx nginx
命令中的最后一個(gè)nginx即表示創(chuàng)建該容器所需要的模板
鏡像的體系結(jié)構(gòu)
鏡像的最底層是一個(gè)啟動(dòng)文件系統(tǒng)(bootfs)鏡像,bootfs的上層鏡像叫做根鏡像,一般來(lái)說(shuō),根鏡像是一個(gè)操作系統(tǒng),例如Ubuntu、CentOS等,用戶的鏡像必須構(gòu)建于根鏡像之上,在根鏡像之上,用戶可以構(gòu)建出各種各樣的其他鏡像。從上面的介紹讀者可以看出,鏡像的本質(zhì)其實(shí)就是一系列文件的集合,一層套一層的結(jié)構(gòu)有點(diǎn)類似于Git。
鏡像的寫時(shí)復(fù)制機(jī)制
通過(guò)docker run 命令指定一個(gè)容器創(chuàng)建鏡像時(shí),實(shí)際上是在該鏡像上創(chuàng)建一個(gè)空的可讀寫的文件系統(tǒng)層級(jí),可以將這個(gè)文件系統(tǒng)層級(jí)當(dāng)成一個(gè)臨時(shí)的鏡像來(lái)對(duì)待,而命令中所指的模版鏡像則可以稱之為父鏡像。父鏡像的內(nèi)容都是以只讀的方式掛載進(jìn)來(lái)的,容器會(huì)讀取共享父鏡像的內(nèi)容,用戶所做的所有修改都是在文件系統(tǒng)中,不會(huì)對(duì)父鏡像造成任何影響。當(dāng)然用戶可以通過(guò)其他一些手段使修改持久化到父鏡像中,這個(gè)我們后面會(huì)詳細(xì)介紹到。
查看
docker images
用戶可以通過(guò)docker images命令查看本地所有鏡像
這里一共有五個(gè)參數(shù):
1.REPOSITORY
倉(cāng)庫(kù)名稱,倉(cāng)庫(kù)一般用來(lái)存放同一類型的鏡像,倉(cāng)庫(kù)的名稱由其創(chuàng)建者指定。如果沒(méi)有指定則為。一般來(lái)說(shuō),倉(cāng)庫(kù)名稱有如下幾種不同的形式。
[namespaceubuntu]:這種倉(cāng)庫(kù)名稱由命名空間和實(shí)際的倉(cāng)庫(kù)名組成,中間通過(guò)隔開(kāi)。當(dāng)開(kāi)發(fā)者在Docker Hub上創(chuàng)建一個(gè)用戶時(shí),用戶名就是默認(rèn)的命名空間,這個(gè)命令空間是用來(lái)區(qū)分Docker Hub上注冊(cè)的不同用戶或者組織(類似于GitHub上用戶名的作用),如果讀者想將自己的鏡像上傳到DockerHub上供別人使用,則必須指定命名空間。 [ubuntu]:這種只有倉(cāng)庫(kù)名,對(duì)于這種沒(méi)有命名空間的倉(cāng)庫(kù)名,可以認(rèn)為其屬于頂級(jí)命名空間,該空間的倉(cāng)庫(kù)只用于官方的鏡像,由Docker官方進(jìn)行管理,但一般會(huì)授權(quán)給第三方進(jìn)行開(kāi)發(fā)維護(hù)。當(dāng)然用戶自己創(chuàng)建的鏡像也可以使用這種命名方式,但是將無(wú)法上傳到Docker Hub上共享。 [hub.c.163.com/library/nginx]:這種指定url路徑的方式,一般用于非Docker Hub上的鏡像命名,例如一個(gè)第三方服務(wù)商提供的鏡像或者開(kāi)發(fā)者自己搭建的鏡像中心,都可以使用這種命名方式命名。2.TAG 用于區(qū)分同一倉(cāng)庫(kù)的不同鏡像,默認(rèn)為latest
3.IMAGE ID 是鏡像的一個(gè)唯一標(biāo)識(shí)符
4.CREATED 鏡像的創(chuàng)建時(shí)間
5.SIZE 表示鏡像大小
使用docker images命令可以查看本地所有的鏡像,如果鏡像過(guò)多,可以通過(guò)通配符進(jìn)行匹配,如下:
如果需要查看鏡像的詳細(xì)信息,也可以通過(guò)上文提到的docker inspect 命令來(lái)查看下載
當(dāng)用戶執(zhí)行docker run命令時(shí),就會(huì)自動(dòng)去Docker Hub上下載相關(guān)的鏡像,這個(gè)就不再重復(fù)演示,開(kāi)發(fā)者也可以通過(guò)search命令去Docker Hub上搜索符合要求的鏡像,如下:
其中:
NAME:表示鏡像的名稱 DESCRIPTION:表示鏡像的簡(jiǎn)要描述 STARS:表示用戶對(duì)鏡像的評(píng)分,評(píng)分越高越可以放心使用。 OFFICIAL:是否為官方鏡像 AUTOMATED: 是否使用了自動(dòng)構(gòu)建在執(zhí)行docker run命令再去下載,速度會(huì)有點(diǎn)慢,如果希望該命令能夠快速執(zhí)行,可以在執(zhí)行之前,先利用docker pull命令將鏡像先下載下來(lái),然后在運(yùn)行。
運(yùn)行命令如下:
刪除
鏡像可以通過(guò)docker rmi命令進(jìn)行刪除,參數(shù)為鏡像的id或者鏡像名,參數(shù)可以有多個(gè),多個(gè)參數(shù)之間空格隔開(kāi),如下:
有的時(shí)候,無(wú)法刪除一個(gè)鏡像,大部分原因是因?yàn)樵撶R像被一個(gè)容器所依賴,此時(shí)需要先刪除容器,然后就可以刪除鏡像了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
