Dockerfile中COPY和ADD
發(fā)布時間:2021-11-19 點擊數(shù):689
一、COPY指令
COPY 指令從 <src> 復制新的文件或目錄,并將它們添加到 Docker 容器文件系統(tǒng)的 <dest> 的路徑下。
1.COPY兩種格式:
- COPY [--chown=<user>:<group>] <src>... <dest>
- COPY [--chown=<user>:<group>] ["<src>",... "<dest>"](包含空格的路徑需要使用這種格式)
2.COPY使用規(guī)則
復制指令必須遵循以下規(guī)則:
- <src>路徑必須在構(gòu)建的上下文中;您不能復制../something/something,因為docker構(gòu)建的第一步是將上下文目錄(和子目錄)發(fā)送到docker守護進程。
- 如果<src>是一個目錄,則復制該目錄的全部內(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ù)。當遇到 URL 時候,可以通過 URL 下載文件并且復制到 <dest>。
(2).ADD 的另一個特性是自動解壓文件的能力。如果 <src> 參數(shù)是一個可識別壓縮格式(tar, gzip, bzip2, …)的本地文件(注:無法實現(xiàn)同時下載并解壓),就會被解壓到指定容器文件系統(tǒng)的路徑 <dest> 下。
3.ADD使用規(guī)則
- <src>路徑必須在構(gòu)建的上下文中;您不能添加../something/something,因為docker構(gòu)建的第一步是將上下文目錄(和子目錄)發(fā)送到docker守護進程。
- 如果<src>是一個URL并且<dest>沒有以斜杠結(jié)尾,則會從URL下載一個文件并復制到<dest>。
- 如果<src>是一個URL,并且<dest>以斜杠結(jié)尾,則從URL推斷文件名,并將文件下載到<dest>/<filename>。例如,添加http://example.com/foobar /將創(chuàng)建文件/foobar。URL必須有一個非平凡的路徑,以便在這種情況下可以找到適當?shù)奈募?http://example.com 不起作用)。
- 如果<src>是一個目錄,則復制該目錄的全部內(nèi)容,包括文件系統(tǒng)元數(shù)據(jù)。
三、實戰(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é)
對于不需要自動解壓的文件或目錄,應該始終使用COPY指令。
最后,認準一個原則:總是使用COPY(除非我們明確需要ADD)。
上一篇:OushuDB 的主要功能 下一篇:阿里云安全認證的等級 阿里云認證含金量高嗎?
