版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Docker容器技術(shù)與應(yīng)用湖北
輕工職業(yè)技術(shù)學(xué)院Docker鏡像管理和定制項目2項目背景在正常情況下,docker有一個默認(rèn)連接的國外官方鏡像,在國外的用戶訪問該官方鏡像自然不成問題,但是國內(nèi),由于國情不同,中國的網(wǎng)絡(luò)訪問國外官方鏡像網(wǎng)速一向很慢,而且往往還會遭遇斷網(wǎng)的窘境,所以對于國內(nèi)的用戶,要想正常使用docker的鏡像,就不得不配置相應(yīng)的國內(nèi)鏡像。Docker鏡像管理和定制項目2鏡像是Docker的核心技術(shù)之一,是創(chuàng)建Docker容器的基礎(chǔ)模板。本項目通過3個任務(wù)介紹鏡像的基本概念和圍繞鏡像這一核心概念的具體操作,包括如何使用pull命令獲取鏡像、如何查看本地已有的鏡像信息和管理鏡像、如何創(chuàng)建用戶定制的鏡像,以及如何創(chuàng)建私有倉庫。項目二:Docker鏡像管理和定制目錄任務(wù)2.1、查看和管理Docker鏡像任務(wù)2.2、創(chuàng)建和使用私有倉庫任務(wù)2.3、創(chuàng)建定制的Docker鏡像查看和管理Docker鏡像回顧1、了解鏡像的基本概念。2、掌握鏡像的常用操作命令。3、了解倉庫的基本概念。4、掌握私有倉庫的構(gòu)建及使用方法。知識目標(biāo)掌握dockercommit命令構(gòu)建鏡像的方法。掌握利用Dockerfile文件構(gòu)建鏡像的方法。能力目標(biāo)掌握dockercommit命令定制鏡像的方法。掌握dockerbuild命令定制鏡像的方法。素質(zhì)目標(biāo)培養(yǎng)科技強(qiáng)國意識。樹立工匠精神。小王編寫完Docker鏡像基礎(chǔ)操作手冊后,發(fā)現(xiàn)鏡像基礎(chǔ)操作手冊中所用的鏡像均為DockerHub提供的鏡像,但這些通用鏡像在實際部署中可能與具體項目需求存在不匹配的情況。因此,小王決定在操作手冊中添加關(guān)于Docker鏡像定制的功能,并通過實例進(jìn)行說明。任務(wù)2.3創(chuàng)建定制的Docker鏡像任務(wù)要求2.3通過commit命令創(chuàng)建鏡像構(gòu)建Docker鏡像有以下兩種方法。(1)使用dockercommit命令手動構(gòu)建。(2)使用dockerbuild命令和Dockerfile文件進(jìn)行構(gòu)建原則上不能無中生有地創(chuàng)建一個鏡像,需要一個基礎(chǔ)鏡像。嚴(yán)格來說,用戶并不是真正創(chuàng)建一個新的鏡像,無論是啟動一個容器還是創(chuàng)建一個鏡像,一般都是在基礎(chǔ)鏡像基礎(chǔ)之上的,比如基礎(chǔ)redhat鏡像、ubuntun鏡像等。任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3通過commit命令創(chuàng)建鏡像dockercommit命令和dockerbuild命令的區(qū)別:dockercommit是將容器提交為一個鏡像,只提交容器鏡像發(fā)生變更的部分,即修改后的容器鏡像與當(dāng)前倉庫對應(yīng)鏡像之間的差異部分,這使得更新非常輕量級。而dockerbuild是在一個基礎(chǔ)鏡像上重新構(gòu)建一個新的鏡像。任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3通過commit命令創(chuàng)建鏡像DockerDaemon接收到對應(yīng)的HTTP請求后,需要執(zhí)行的步驟如下。(1)根據(jù)用戶輸入的pause參數(shù)的設(shè)置,來判定是否暫停該Docker容器的運(yùn)行。(選項-p:在提交時,將容器暫停)(2)將容器的可讀寫層導(dǎo)出打包,該讀寫層代表了當(dāng)前運(yùn)行容器的文件系統(tǒng)與當(dāng)初啟動容器的鏡像之間的差異。(3)在存儲層中注冊可讀寫層差異包。(4)更新鏡像歷史信息和rootfs,并據(jù)此在鏡像存儲中創(chuàng)建一個新鏡像,記錄其元數(shù)據(jù)。(5)如果指定了repository信息,則給上述鏡像添加標(biāo)簽信息任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3舉例:以ubuntu安裝vim為例,說明dockercommit創(chuàng)建定制docker鏡像的過程。任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3舉例:以ubuntu更新apt-get為例,說明dockercommit更新docker鏡像的過程。更新鏡像之前,我們需要使用鏡像來創(chuàng)建一個容器。任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3在運(yùn)行的容器內(nèi)使用
apt-getupdate
命令進(jìn)行更新。在完成操作之后,輸入
exit命令來退出這個容器。此時ID為e218edb10161的容器,是按我們的需求更改的容器。我們可以通過命令dockercommit來提交容器副本。dockercommit命令的格式dockercommit[選項]<容器ID或容器名>[<倉庫名>[:<標(biāo)簽>]]dockercommit命令的常用選項如下。(1)-a:提交鏡像的作者。(2)-c:使用Dockerfile指令來創(chuàng)建鏡像。(3)-m:提交時的說明文字。(4)-p:在提交時,將容器暫停。任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3各個參數(shù)說明:-m:
提交的描述信息-a:
指定鏡像作者e218edb10161:容器IDrunoob/ubuntu:v2:
指定要創(chuàng)建的目標(biāo)鏡像名我們可以使用
dockerimages
命令來查看我們的新鏡像
runoob/ubuntu:v2舉例:利用dockercommit創(chuàng)建定制docker鏡像。dockercommit的缺點雖然dockercommit命令可以比較直觀的構(gòu)建鏡像,但在實際環(huán)境中并不建議使用dockercommit命令構(gòu)建鏡像,因為存在以下缺點:
1、在構(gòu)建鏡像中,由于需要安裝相關(guān)的軟件,可能會造成大量不必要的軟件也被安裝,如果清理軟件不小心,也會導(dǎo)致鏡像比較大。
2、利用dockercommit在構(gòu)建鏡像的過程中,由于dockercommit對鏡像的操作屬于黑箱操作,主要指除了制定鏡像的用戶知道執(zhí)行過什么命令,怎么生成鏡像的,而其他用戶無從得知,將會給后期對鏡像維護(hù)工作帶來很大的困難。任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3利用Dockerfile構(gòu)建鏡像
我們使用命令
dockerbuild
,從零開始來創(chuàng)建一個新的鏡像。為此,我們需要創(chuàng)建一個
Dockerfile
文件,其中包含一組指令來告訴Docker如何構(gòu)建我們的鏡像。Dockerfile文件是一個文本文件,也是一個Docker可以解讀的腳本文件,在這個腳本文件中記錄著用戶“創(chuàng)建”鏡像過程中需要執(zhí)行的所有命令。當(dāng)docker讀取并執(zhí)行Dockerfile文件中所定義的指令時,這些指令將產(chǎn)生一些臨時文件層,并會用一個名稱來標(biāo)記這些臨時文件層。有些Dockerfile中的指令并不會創(chuàng)建新的鏡像層。比如ENV、EXPOSE、CMD以及ENTRY-POINT。不過,這些命令會在鏡像中添加元數(shù)據(jù)。
任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3利用Dockerfile構(gòu)建鏡像Dockerfile從FROM命令開始,緊接著是各種方法、命令和參數(shù)。其產(chǎn)出為一個新的可以用于創(chuàng)建容器的鏡像。Dockerfile整體就兩類語句組成:#Comment注釋信息Instructionarguments指令參數(shù),一行一個指令。任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3說明:Dockerfile文件名首字母必須大寫。Dockerfile指令不區(qū)分大小寫,但是為方便和參數(shù)做區(qū)分,通常指令使用大寫字母。Dockerfile中指令按順序從上至下依次執(zhí)行。Dockerfile中第一個非注釋行必須是FROM指令,用來指定制作當(dāng)前鏡像依據(jù)的是哪個基礎(chǔ)鏡像。Dockerfile中需要調(diào)用的文件必須跟Dockerfile文件在同一目錄下,或者在其子目錄下,父目錄或者其它路徑無效。編寫Dockerfile文件要求盡可能精簡。其目的是為了盡可能產(chǎn)生數(shù)目較少的中間層鏡像。任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3任務(wù)2.3創(chuàng)建定制的Docker鏡像Dockerfile操作指令2.3指令含義FROM鏡像指定新鏡像所基于的鏡像,第一條指令必須為FROM指令,每創(chuàng)建一個鏡像就需要一條FROM指令。MAINTAINER名字說明新鏡像的維護(hù)人信息RUN命令在所基于的鏡像上執(zhí)行命令,并提交到新的鏡像中CMD[“要運(yùn)行的程序“,”參數(shù)1,“參數(shù)2“]指令啟動容器時要運(yùn)行的命令或者腳本,Dockerfile只能有一條CMD命令,如果指定多條則只能最后一條被執(zhí)行EXPOSE端口號指定新鏡像加載到Docker時要開啟的端口ENV環(huán)境變量變量值設(shè)置一個環(huán)境變量的值,會被后面的RUN使用ADD源文件/目錄目標(biāo)文件/目錄將源文件復(fù)制到目標(biāo)文件,源文件要與Dockerfile位于相同目錄中,或者是一個URLCOPY源文件/目錄目標(biāo)文件/目錄將本地主機(jī)上的文件/目錄復(fù)制到目標(biāo)地點,源文件/目錄要與Dockerfile在相同的目錄中VOLUME[“目錄“]在容器中創(chuàng)建一個掛載點USER用戶名/UID指定運(yùn)行容器時的用戶WORKDIR路徑為后續(xù)的RUN、CMD、ENTRYPOINT指定工作目錄ONBUILD命令指定所生成的鏡像作為一個基礎(chǔ)鏡像時所要運(yùn)行的命令HEALTHCHECK健康檢查任務(wù)2.3創(chuàng)建定制的Docker鏡像Dockerfile操作指令2.3Docker官方提供的一個最小的鏡像為hello-world鏡像,它的Dockerfile內(nèi)容只有3行,如下所示。FROMscratchCOPYhello/CMD["/hello"]其中,F(xiàn)ROM命令定義所有的基礎(chǔ)鏡像,即該鏡像從哪個鏡像開始構(gòu)建,scratch表示空白鏡像,該鏡像不依賴其他鏡像,從“零”開始構(gòu)建,第2行表示將文件hello復(fù)制到鏡像的根目錄。第3行則意味著通過鏡像啟動容器時執(zhí)行/hello這個可執(zhí)行文件。對Dockerfile文件執(zhí)行,使用build命令即可構(gòu)建鏡像。相關(guān)知識任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3Dockerfile操作指令語法格式:dockerbuild[選項]
常用選項:-t:指定鏡像的名字-f:顯示指定構(gòu)建鏡像的Dockerfile文件(Dockerfile可不在當(dāng)前路徑下);如果不使用-f,則默認(rèn)將上下文路徑下的名為Dockerfile的文件認(rèn)為是構(gòu)建鏡像的“Dockerfile”;上下文路徑|URL:指定構(gòu)建鏡像的上下文的路徑,構(gòu)建鏡像的過程中,可以且只可以引用上下文中的任何文件。構(gòu)建上下文是由文件路徑或一個URL(Git倉庫位置)定義的一組文件。舉例:[root@host1imglayers]#dockerbuild-tsecond:v1.0.注意最后有個點,默認(rèn)使用“上下文目錄(Context)下的名為Dockerfile的文件作為Dockerfile”,在此,即用當(dāng)前路徑的Dockerfile進(jìn)行構(gòu)建。-tsecond:v1.0給新構(gòu)建的鏡像取名為second,并設(shè)定版本為v1.0。Dockerfile的常用指令1.FROM指令FROM是Dockerfile內(nèi)置命令中唯一一個必填項,共有以下3種用法。FROM<image>FROM<image>:<tag>FROM<image>:<digest>任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3Dockerfile的常用指令1.FROM指令FROM指令的作用是指定基礎(chǔ)鏡像,并且必須是dockerfile中的第一條非注釋指令。FROM指定的基礎(chǔ)鏡像可以是本地已存在的鏡像,也可以是遠(yuǎn)程倉庫中的鏡像。也就是當(dāng)Dockerfile指令執(zhí)行時,如果本地沒有其指定的基礎(chǔ)鏡像,則會從遠(yuǎn)程倉庫中下載此鏡像。當(dāng)需要在一個Dockerfile中構(gòu)建多個鏡像時,允許多次出現(xiàn)FROM。當(dāng)Dockerfile執(zhí)行完畢之后,會同時生成多個鏡像,但只會輸出最后一個鏡像的ID值,中間的鏡像會被標(biāo)記位<none>:<none>。任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3Dockerfile的常用指令2.MAINTAINER指令MAINTAINER指令可以放置在Dockerfile命令的任意位置。該指令用于聲明鏡像作者,建議放在FROM指令之后。MAINTAINER指令的格式如下。MAINTAINER<name>任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3Dockerfile的常用指令3.RUN指令RUN指令是Dockerfile執(zhí)行命令的核心部分,是用于在鏡像中執(zhí)行命令的指令,它接收命令作為參數(shù)并用于創(chuàng)建鏡像。RUN指令有以下兩種格式。格式1:RUN<command>格式2:RUN["executable","param1","param2"]任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3Dockerfile的常用指令3.RUN指令例如:#RUN[“/bin/sh”,“-c”,“echohello”]等價于RUN/bin/sh–c“echohello”當(dāng)使用RUN<command>的用法時,表示在SHELL終端中運(yùn)行命令。例如RUN/bin/sh–c“echohello“,但該指令用法有一個限制,即鏡像中必須有/bin/sh。如果基礎(chǔ)鏡像沒有/bin/sh,則需要使用RUN[”executable”,“param1”,“param2”],表示用exec執(zhí)行/bin/sh“當(dāng)成C語言的main函數(shù)一樣,寫shell必須有,以使shell程序更嚴(yán)密。即:#!/bin/sh
是指此腳本使用/bin/sh來解釋執(zhí)行。任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3Dockerfile的常用指令3.RUN指令注意:Dockerfile的每一個指令都會構(gòu)建文件層,例如在docker所使用的aufs中,所有的鏡像層至多保存126層,而執(zhí)行一次RUN命令就會產(chǎn)生一個新文件,并在其上執(zhí)行命令,執(zhí)行完畢后,提交這一層的修改,構(gòu)建新的鏡像,所以過多無意義的層,會造成鏡像膨脹過大。所以對于編譯軟件的安裝更新的操作,無需分成幾層來操作,這樣會使得鏡像非常臃腫,不僅增加了構(gòu)建部署的時間,還容易出錯。例如:任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3以上執(zhí)行會創(chuàng)建3層鏡像。Dockerfile的常用指令3.RUN指令這樣只需要使用一條RUN指令,只會新建一層,因此對于一些需要合并為一層的操作,可以使用&&
符號將多個命令分隔開,再連接起來,使其先后執(zhí)行。如果run指令太長,則可以使用\符號進(jìn)行換行操作。此外,還可以使用#符號進(jìn)行行首的注釋。例如:任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3以上執(zhí)行會創(chuàng)建3層鏡像。可簡化為以下格式:如上,以
&&
符號連接命令,這樣執(zhí)行后,只會創(chuàng)建1層鏡像。Dockerfile的常用指令4.CMD指令CMD指令與RUN指令基本相似,其指令格式如下。格式1:CMD["executable","param1","param2"]
例如:#RUN["/bin/sh",“-c","echohello"]格式2:CMD["param1","param2"]
該寫法是為ENTRYPOINT指令指定的程序提供默認(rèn)參數(shù)
格式3:CMDcommandparam1param2
該寫法是以“/bin/sh-c”的方法執(zhí)行推薦使用第一種格式,執(zhí)行過程比較明確。第三種格式實際上在運(yùn)行的過程中也會自動轉(zhuǎn)換成第一種格式運(yùn)行,并且默認(rèn)可執(zhí)行文件是sh任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.34.CMD指令類似于RUN指令,用于運(yùn)行程序,但二者運(yùn)行的時間點不同:CMD在dockerrun時運(yùn)行。RUN是在dockerbuild。作用:為啟動的容器指定默認(rèn)要運(yùn)行的程序,程序運(yùn)行結(jié)束,容器也就結(jié)束。CMD指令指定的程序可被dockerrun命令行參數(shù)中指定要運(yùn)行的程序所覆蓋。注意:1、在一個Dockerfile文件中可以同時出現(xiàn)多次CMD指令,但只有最后一條CMD指令生效。2、CMD中只能使用雙引號,不能使用單引號。舉例:CMD[“httpd”,“-D”]任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.35.ENTRYPOINT指令類似于CMD指令,但其不會被dockerrun的命令行參數(shù)指定的指令所覆蓋,而且這些命令行參數(shù)會被當(dāng)作參數(shù)送給ENTRYPOINT指令指定的程序。但是,如果運(yùn)行dockerrun時使用了--entrypoint選項,將覆蓋ENTRYPOINT指令指定的程序。優(yōu)點:在執(zhí)行dockerrun的時候可以指定ENTRYPOINT運(yùn)行所需的參數(shù)。注意:如果Dockerfile中如果存在多個ENTRYPOINT指令,僅最后一個生效。格式:格式1:ENTRYPOINT<command>格式2:ENTRYPOINT["<executeable>","<param1>","<param2>",...]任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.3CMD和ENTRYPOINT指令的區(qū)別CMD給出的是一個容器的默認(rèn)的可執(zhí)行體。也就是容器啟動以后,默認(rèn)的執(zhí)行的命令。重點就是這個“默認(rèn)”。意味著,如果dockerrun沒有指定任何的執(zhí)行命令或者dockerfile里面也沒有entrypoint,那么,就會使用cmd指定的默認(rèn)的執(zhí)行命令執(zhí)行。同時也從側(cè)面說明了entrypoint的含義,它才是真正的容器啟動以后要執(zhí)行命令。任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.35.ENTRYPOINT指令可以搭配CMD命令使用:一般是變參才會使用CMD,這里的CMD等于是在給ENTRYPOINT傳參。示例:假設(shè)已通過Dockerfile構(gòu)建了nginx:test鏡像。任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.31、不傳參運(yùn)行容器內(nèi)會默認(rèn)運(yùn)行以下命令,啟動主進(jìn)程。2、傳參運(yùn)行容器內(nèi)會默認(rèn)運(yùn)行以下命令,啟動主進(jìn)程(/etc/nginx/new.conf:假設(shè)容器內(nèi)已有此文件)6.ENV指令設(shè)置環(huán)境變量,定義了環(huán)境變量,那么在后續(xù)的指令中,就可以使用這個環(huán)境變量。其指令格式如下:格式1:ENV<key><value>格式2:ENV<key1>=<value1><key2>=<value2>...以下示例設(shè)置NODE_VERSION=7.2.0,在后續(xù)的指令中可以通$NODE_VERSION引用:任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.37.ARG指令構(gòu)建參數(shù),與ENV作用一致。不過作用域不一樣。ARG設(shè)置的環(huán)境變量僅對Dockerfile內(nèi)有效,也就是說只有dockerbuild的過程中有效,構(gòu)建好的鏡像內(nèi)不存在此環(huán)境變量。構(gòu)建命令dockerbuild中可以用--build-arg<參數(shù)名>=<值>來覆蓋。其指令格式:ARG<參數(shù)名>[=<默認(rèn)值>]舉例:--build-arguser_name=username_value如果利用dockerbuild命令傳遞的參數(shù)在Dockerfile中沒有對應(yīng)的參數(shù),則會拋出警告,但從1.13版本開始,不再保存退出,只是警告,可以繼續(xù)構(gòu)建鏡像。
不過在構(gòu)建鏡像的過程中,不建議以參數(shù)的形式傳遞機(jī)密信息,比如密碼信息。任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.38.ADD指令A(yù)DD指令的功能是將主機(jī)目錄中的文件、目錄及一個URL標(biāo)記的文件復(fù)制到鏡像中。其指令格式如下。格式1:ADD<src>...<dest>格式2:ADD["<src>",..."<dest>"]說明:兩個格式基本相同,區(qū)別是,格式2可以用于處理文件路徑有空格的情況。當(dāng)src標(biāo)記的是本地路徑或目錄時,其相對路徑應(yīng)該是相對于dockerfile所在目錄的路徑。在src標(biāo)記的路徑中,允許使用通配符。dest指向容器中的目錄,不允許使用通配符。其指定的路徑必須是絕對路徑,或者相對于WORKDIR的相對路徑。如果dest指定的目錄不存在,則當(dāng)ADD執(zhí)行命令時,將會在容器中自動創(chuàng)建此目錄。
任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.38.ADD指令其指令格式如下。格式1:ADD<src>...<dest>格式2:ADD["<src>",..."<dest>"]舉例:ADD*.conf/myconf//用*代表多個任意字符ADD?.txt/myconf //用?代表1個任意字符
任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.38.ADD指令注意(src源路徑,dest目標(biāo)路徑)1、如果src是一個文件,且dest是以/結(jié)尾的,則docker會把目標(biāo)路徑當(dāng)做一個目錄,并把源文件復(fù)制該目錄中。如果dest不存在,則會自動創(chuàng)建dest。2、如果src是一個文件,且dest不是以/結(jié)尾的,則docker會把目標(biāo)路徑當(dāng)做一個文件。如果dest不存在,則會以dest為名創(chuàng)建一個文件,內(nèi)容同源文件;如果dest存在,則會用源文件覆蓋它,但只是內(nèi)容覆蓋,文件名還是目標(biāo)文件名;如果dest實際是一個存在的目錄,則會源文件復(fù)制到該目錄中。3、如果src是一個目錄,且dest不存在,則docker會自動以目標(biāo)路徑創(chuàng)建一個目錄,并把源文件復(fù)制該目錄中。如果dest是一個存在的目錄,則會把源文件復(fù)制該目錄中。4、如果src是一個歸檔文件(壓縮文件),則Docker會自動解壓此文件。
任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.39.COPY指令COPY指令和ADD指令的功能及使用方法基本相同,只是COPY指令不會做自動解壓工作,其指令格式如下。格式1:COPY<src>...<dest>格式2:COPY["<src>",..."<dest>"]同ADD指令一樣,COPY指令格式2也用于處理路徑中存在空格的情況。COPY指令的dest必須是絕對路徑或是相對于WORKDIR的相對路徑。任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.39.COPY指令COPY指令與ADD指令不同之處如下:1、在實際應(yīng)用中,如果只是復(fù)制文件,則建議使用COPY指令;而如果需要自動解壓文件,則建議使用ADD指令。2、ADD的優(yōu)點:在執(zhí)行<源文件>為tar壓縮文件的話,壓縮格式為gzip,bzip2以及xz的情況下,會自動復(fù)制并解壓到<目標(biāo)路徑>。3、ADD的缺點:在不解壓的前提下,無法復(fù)制tar壓縮文件。會令鏡像構(gòu)建緩存失效,從而可能會令鏡像構(gòu)建變得比較緩慢。具體是否使用,可以根據(jù)是否需要自動解壓來決定。任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.310.VOLUME指令
VOLUME指令可實現(xiàn)掛載功能,可以將本地文件夾或者其他容器的文件夾掛載到某個容器中,用于定義匿名數(shù)據(jù)卷。在啟動容器時忘記掛載數(shù)據(jù)卷,會自動掛載到匿名卷。作用:避免重要的數(shù)據(jù),因容器重啟而丟失,這是非常致命的。避免容器不斷變大。其指令格式如下:格式1:VOLUME<路徑>格式2:VOLUME["<路徑1>","<路徑2>",…]在啟動容器dockerrun的時候,我們可以通過-v參數(shù)修改掛載點。舉例:volume[“/abv”]任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.310.VOLUME指令注意:1、在啟動容器dockerrun的時候,我們可以通過-v參數(shù)修改掛載點。2、如果Dokerfile中已經(jīng)聲明了某個掛載點,那么以后對此掛載點文件的操作將不會生效,因此,建議在Dokcerfile文件的結(jié)尾聲明掛載點。任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.311.EXPOSE指令EXPOSE指令用于聲明運(yùn)行時的容器服務(wù)端口,僅僅只是聲明端口。作用:幫助鏡像使用者理解這個鏡像服務(wù)的守護(hù)端口,以方便配置映射。在運(yùn)行時使用隨機(jī)端口映射時,也就是dockerrun-P時,會自動隨機(jī)映射EXPOSE的端口。其指令格式如下:EXPOSE<端口1>[<端口2>...]注意:EXPOSE指令只是聲明了容器應(yīng)該打開的端口,實際上并沒有打開該端口,在容器啟動時,如果不要-p或-P指定映射的端口,則容器不會將端口映射出去,外部網(wǎng)絡(luò)也就無法訪問這些端口,只能被主機(jī)中其他容器訪問。舉例:EXPOSE80任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.312.WORKDIR指令WORKDIR指令用于設(shè)置容器的工作目錄.其指令格式如下:WORKDIR<工作目錄>WORKDIR指令指定的工作目錄不存在時,會自動創(chuàng)建該目錄。WORKDIR指令可以為RUN、CMD、ENTRYPOINT、COPY和ADD指令配置工作目錄。dockerbuild構(gòu)建鏡像過程中的,每一個RUN命令都是新建的一層。只有通過WORKDIR創(chuàng)建的目錄才會一直存在。任務(wù)2.3創(chuàng)建定制的Docker鏡像相關(guān)知識2.312.WORKDIR指令
注意: Dockerfile文件中允許出現(xiàn)多個WORDIR,但最終生效的路徑
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《正常人體功能》課件-蛋白質(zhì)化學(xué)
- 《影音編輯》課件-馬玉琴影視編輯與制作合成教程
- 運(yùn)維外包服務(wù)合同
- 黨支部2026年工作計劃和目標(biāo)
- 2025年大量程固體物位儀表合作協(xié)議書
- 2025年TAC膜合作協(xié)議書
- 2025年壓紋機(jī)項目建議書
- 吉林省白城市2025~2026學(xué)年度上學(xué)期期末測試 七年級英語(含答題卡、答案)
- 護(hù)理實踐教學(xué)創(chuàng)新策略
- 護(hù)理社區(qū)護(hù)理與健康促進(jìn)
- 主動脈夾層的護(hù)理常規(guī)
- 2025年出入境管理信息系統(tǒng)考試試卷及答案
- 肉牛合作養(yǎng)殖方案(3篇)
- 骨盆骨折患者麻醉管理要點
- 2025貴陽人文科技學(xué)院教師招聘考試試題
- 高職院校產(chǎn)教融合共同體建設(shè)國內(nèi)外研究動態(tài)及啟示
- T/CWAN 0068-2023銅鋁復(fù)合板
- 兒童寓言故事-烏鴉喝水
- 弱電系統(tǒng)維護(hù)中的安全和文明措施
- 緊急狀態(tài)下護(hù)理人力資源調(diào)配
- 安全生產(chǎn)文明施工評價報告
評論
0/150
提交評論