首頁  >  文章  >  運維  >  docker中copy和add指令有什麼區別

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

青灯夜游
青灯夜游原創
2021-11-29 16:57:0723787瀏覽

區別: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 cbce1a3cf2f839037583dce8e845670b ,並將它們加入6be58d1426a577c69ada50a4bc87dd69中。

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

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

新增所有以「hom」開頭的檔案:

ADD hom* /mydir/

在下面的範例中,?被替換為任何單一字符,例如「home.txt」。

ADD hom?.txt /mydir/

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

ADD指令有以下的優越性:

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

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

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

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

上面的優點也是ADD劣勢

推薦學習:《docker影片教學

以上是docker中copy和add指令有什麼區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn