Dockerfile指令
- ** CMD **
用于指定一個(gè)容器啟動(dòng)時(shí)要運(yùn)行的命令管跺。
CMD["/bin/bash","-l"]
Docker 推薦使用數(shù)組的語(yǔ)法設(shè)置要執(zhí)行的命令喳张。在Dockerfile中只能指定一條CMD命令.如果指定了多條康辑,也只有最后一條被使用挤土。
docker run命令可以覆蓋CMD指令条篷。
- ENTRYPOINT
這個(gè)指令與CMD指令類(lèi)似腰素,但是這個(gè)指令不會(huì)輕易被docker run覆蓋。因此可以將這兩個(gè)命令組合起來(lái)使用轰豆。
見(jiàn)如下:
在原來(lái)基礎(chǔ)上加了這兩條命令
如果啟動(dòng)時(shí)胰伍,不指定命令,nginx則默認(rèn)使用 -h方式啟動(dòng) (用來(lái)顯示Nginx的幫助信息)
如果指定了酸休,則使用指定命令
docker run -d -p 80 keithfu/static_web -g "daemon off;"
如果確實(shí)需要骂租,可以通過(guò)--entrypoint標(biāo)志覆蓋ENTRYPOINT指令
-
WORKDIR
該指令用來(lái)從鏡像創(chuàng)建一個(gè)新容器時(shí),在容器內(nèi)設(shè)置一個(gè)工作目錄雨席。ENTRYPOINT和CMD命令指定的程序會(huì)在這個(gè)目錄下執(zhí)行
WORKDIR /opt/webapp/db
RUN bundle install
wORKDIR /opt/webapp
ENTRYPOINT ["rackup"]
可以使用 -w標(biāo)識(shí)在運(yùn)行時(shí)覆蓋工作目錄
docker run -ti -w /var/log ubuntu pwd
- ENV
用來(lái)設(shè)置環(huán)境變量菩咨,可以在后續(xù)的任何RUN指令中使用,這就如同在命令前面指定了環(huán)境變量前綴一樣
我們可以在其它命令中直接使用這些環(huán)境變量
ENV TARGET_DIR=/opt/app
WORKDIR $TARGET_DIR
- USER
基于該鏡像啟動(dòng)的容器會(huì)以nginx 用戶的身份來(lái)運(yùn)行陡厘。我們可以指定用戶名或UID以及組或GID,也可是兩者的組合抽米。
USER user
USER user:group
USER uid
USER uid:gid
USER uid:group
...
可以通過(guò)-u選項(xiàng)來(lái)覆蓋
- VOLUME
用來(lái)基于鏡像創(chuàng)建的容器添加卷。一個(gè)卷是可以存在于一個(gè)或者多個(gè)容器內(nèi)的特定目錄糙置,這個(gè)目錄可以繞過(guò)聯(lián)合文件系統(tǒng)云茸,并提供如下共享數(shù)據(jù)或者對(duì)數(shù)據(jù)進(jìn)行持久化功能。- 卷可以在容器間共享和重用谤饭。
- 一個(gè)容器可以不是必須和其它容器共享卷
- 對(duì)卷的修性是立時(shí)生效的
- 對(duì)卷的修性不會(huì)對(duì)鏡像產(chǎn)生影響
- 卷會(huì)一直存在直到?jīng)]有任何容器再使用它标捺。
卷的功能讓我們可以將數(shù)據(jù)(如源代碼)、數(shù)據(jù)庫(kù)或者其它內(nèi)容添加到鏡像中而不是將這些內(nèi)容提交到鏡像中揉抵,并且允許我們?cè)诙鄠€(gè)容器間共享這些內(nèi)容亡容。
我們可以通過(guò)數(shù)組的方式指定多個(gè)卷。(后續(xù)介紹)
- ADD
該指令用來(lái)將構(gòu)建環(huán)境下的文件和目錄復(fù)制到鏡像中冤今。需要指定源文件位置和目的文件位置兩個(gè)參數(shù)
ADD software.lic /opt/application/software.lic
在ADD文件時(shí)闺兢,Docker通過(guò)目的地址參數(shù)末尾的字符來(lái)判斷文件源 目錄還是文件。以/結(jié)尾就是目錄戏罢,不以/結(jié)尾則認(rèn)為是文件
文件源源也可以是URL
ADD http://a.com/latest.zip /root/wp.zip
如果ADD在處理本地歸檔文件時(shí)(tar archive,gzip,bzip2,xz)屋谭,Docker 會(huì)自動(dòng)針歸檔文件解開(kāi)
ADD latest.tar.gz /var/www/wordpress/
如果目的位置存在了同名的文件或者目錄脚囊,那們不會(huì)被覆蓋。
ADD指令使用構(gòu)建緩存變得無(wú)效桐磁。該指令后續(xù)的指令都不能繼續(xù)使用之前的構(gòu)建緩存悔耘。
COPY
類(lèi)似于ADD COPY只關(guān)心構(gòu)建上下文復(fù)本地文件,而不會(huì)關(guān)心提取和解壓的工作我擂,且文件必須是與當(dāng)前構(gòu)建環(huán)境相對(duì)的文件或目錄衬以,要Dockerfile同一個(gè)目錄下ONBUILD
該指令能為鏡像添加觸發(fā)器(trigger)。當(dāng)一個(gè)鏡像被用作其鏡像的基礎(chǔ)鏡像時(shí)校摩,會(huì)被執(zhí)行泄鹏。觸發(fā)器可以是任何構(gòu)建指令
ONBUILD ADD . /app/src
ONBUILD RUN cd /app/src && make
ONBUILD 會(huì)按照你鏡像中指定的順序執(zhí)行,并且只能被繼承一次(也就是只能在子鏡像中執(zhí)行秧耗,而不會(huì)在孫子鏡像中執(zhí)行)
刪除鏡像
使用docker rmi 命令