docker中copy和add指令有什么區別

區別:COPY指令不支持從遠程URL獲取資源,只能從執行docker build所在的主機上讀取資源并復制到鏡像中;而ADD指令支持從遠程URL獲取資源,可以通過URL從遠程服務器讀取資源并復制到鏡像中。

docker中copy和add指令有什么區別

本教程操作環境:linux5.9.8系統、docker-1.13.1版、Dell G3電腦。

Dockerfile中的COPY指令和ADD指令都可以將主機上的資源復制或加入到容器鏡像中,都是在構建鏡像的過程中完成的。

DockerFile的ADD和COPY的區別

COPY指令和ADD指令的唯一區別在于:是否支持從遠程URL獲取資源。

COPY指令只能從執行docker build所在的主機上讀取資源并復制到鏡像中。而ADD指令還支持通過URL從遠程服務器讀取資源并復制到鏡像中。

相同需求時,推薦使用COPY指令。ADD指令更擅長讀取本地tar文件并解壓縮。

ADD和COPY指令

COPY同ADD的語法一致,復制拷貝文件。

ADD

復制新文件、目錄或遠程文件 URL ,并將它們添加到中。

可以指定多個資源,但如果它們是文件或目錄,則它們的路徑被解釋為相對于構建上下文的源,也就是_WORKDIR_。

每個都可能包含通配符,匹配將使用 Go 的 filepath.Match規則。例如:

添加所有以“hom”開頭的文件:

ADD?hom*?/mydir/

在下面的示例中,?被替換為任何單個字符,例如“home.txt”。

ADD?hom?.txt?/mydir/

是一個絕對路徑,或相對WORKDIR的相對路徑。

ADD指令有如下的優越性:

  • 1、如果源路徑是個文件,且目標路徑是以 / 結尾, 則docker會把目標路徑當作一個目錄,會把源文件拷貝到該目錄下。
    如果目標路徑不存在,則會自動創建目標路徑。

  • 2、如果源路徑是個文件,且目標路徑是不是以 / 結尾,則docker會把目標路徑當作一個文件。
    如果目標路徑不存在,會以目標路徑為名創建一個文件,內容同源文件;
    如果目標文件是個存在的文件,會用源文件覆蓋它,當然只是內容覆蓋,文件名還是目標文件名。
    如果目標文件實際是個存在的目錄,則會源文件拷貝到該目錄下。 注意,這種情況下,最好顯示的以 / 結尾,以避免混淆。

  • 3、如果源路徑是個目錄,且目標路徑不存在,則docker會自動以目標路徑創建一個目錄,把源路徑目錄下的文件拷貝進來。
    如果目標路徑是個已經存在的目錄,則docker會把源路徑目錄下的文件拷貝到該目錄下。

  • 4、如果源文件是個歸檔文件(壓縮文件),則docker會自動幫解壓。

上面的優勢也是ADD劣勢

推薦學習:《docker視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享