Dockerfile中COPY和ADD
發(fā)布時(shí)間:2021-11-19 點(diǎn)擊數(shù):602
一、COPY指令
COPY 指令從 <src> 復(fù)制新的文件或目錄,并將它們添加到 Docker 容器文件系統(tǒng)的 <dest> 的路徑下。
1.COPY兩種格式:
- COPY [--chown=<user>:<group>] <src>... <dest>
- COPY [--chown=<user>:<group>] ["<src>",... "<dest>"](包含空格的路徑需要使用這種格式)
2.COPY使用規(guī)則
復(fù)制指令必須遵循以下規(guī)則:
- <src>路徑必須在構(gòu)建的上下文中;您不能復(fù)制../something/something,因?yàn)閐ocker構(gòu)建的第一步是將上下文目錄(和子目錄)發(fā)送到docker守護(hù)進(jìn)程。
- 如果<src>是一個(gè)目錄,則復(fù)制該目錄的全部?jī)?nèi)容,包括文件系統(tǒng)元數(shù)據(jù)。
二、ADD指令
1.ADD兩種格式:
- ADD [--chown=<user>:<group>] <src>... <dest>
- ADD [--chown=<user>:<group>] ["<src>",... "<dest>"](包含空格的路徑使用這種格式)
2. ADD 額外的功能 :
(1).ADD 指令可以讓你使用 URL 作為 <src> 參數(shù)。當(dāng)遇到 URL 時(shí)候,可以通過(guò) URL 下載文件并且復(fù)制到 <dest>。
(2).ADD 的另一個(gè)特性是自動(dòng)解壓文件的能力。如果 <src> 參數(shù)是一個(gè)可識(shí)別壓縮格式(tar, gzip, bzip2, …)的本地文件(注:無(wú)法實(shí)現(xiàn)同時(shí)下載并解壓),就會(huì)被解壓到指定容器文件系統(tǒng)的路徑 <dest> 下。
3.ADD使用規(guī)則
- <src>路徑必須在構(gòu)建的上下文中;您不能添加../something/something,因?yàn)閐ocker構(gòu)建的第一步是將上下文目錄(和子目錄)發(fā)送到docker守護(hù)進(jìn)程。
- 如果<src>是一個(gè)URL并且<dest>沒(méi)有以斜杠結(jié)尾,則會(huì)從URL下載一個(gè)文件并復(fù)制到<dest>。
- 如果<src>是一個(gè)URL,并且<dest>以斜杠結(jié)尾,則從URL推斷文件名,并將文件下載到<dest>/<filename>。例如,添加http://example.com/foobar /將創(chuàng)建文件/foobar。URL必須有一個(gè)非平凡的路徑,以便在這種情況下可以找到適當(dāng)?shù)奈募?http://example.com 不起作用)。
- 如果<src>是一個(gè)目錄,則復(fù)制該目錄的全部?jī)?nèi)容,包括文件系統(tǒng)元數(shù)據(jù)。
三、實(shí)戰(zhàn)
- To add all files starting with “hom”:copy以"hom" 開頭的所有文件到鏡像的/mydir/目錄
COPY hom* /mydir/
- The example below uses a relative path, and adds “test.txt” to <WORKDIR>/relativeDir/: copy上下文中的test.txt到 工作目錄的relativeDir目錄
COPY test.txt relativeDir/
四、總結(jié)
對(duì)于不需要自動(dòng)解壓的文件或目錄,應(yīng)該始終使用COPY指令。
最后,認(rèn)準(zhǔn)一個(gè)原則:總是使用COPY(除非我們明確需要ADD)。