GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Docker ADD vs. COPY:Apa Perbedaannya?

Pendahuluan

Saat membuat Dockerfile, ada dua perintah yang dapat Anda gunakan untuk menyalin file/direktori ke dalamnya – ADD dan COPY . Meskipun ada sedikit perbedaan dalam ruang lingkup fungsinya, mereka pada dasarnya melakukan tugas yang sama.

Jadi, mengapa kita memiliki dua perintah, dan bagaimana kita tahu kapan harus menggunakan satu atau yang lain?

Dalam artikel ini, kami menjelaskan setiap perintah, menganalisis Docker ADD vs COPY, dan memberi tahu Anda mana yang harus digunakan.

Perintah TAMBAH Docker

Mari kita mulai dengan mencatat bahwa ADD perintah lebih lama dari COPY . Sejak peluncuran platform Docker, ADD instruksi telah menjadi bagian dari daftar perintahnya.

Perintah menyalin file/direktori ke sistem file dari wadah yang ditentukan.

Sintaks dasar untuk ADD perintahnya adalah:

ADD <src> … <dest>

Ini termasuk sumber yang ingin Anda salin (<src> ) diikuti dengan tujuan di mana Anda ingin menyimpannya (<dest> ). Jika sumbernya adalah direktori, ADD menyalin semua yang ada di dalamnya (termasuk metadata sistem file).

Misalnya, jika file tersedia secara lokal dan Anda ingin menambahkannya ke direktori gambar, ketik:

ADD /source/file/path  /destination/path

ADD juga dapat menyalin file dari URL. Itu dapat mengunduh file eksternal dan menyalinnya ke tujuan yang diinginkan. Misalnya:

ADD http://source.file/url  /destination/path

Fitur tambahannya adalah ia menyalin file terkompresi, secara otomatis mengekstraksi konten di tujuan yang diberikan. Fitur ini hanya berlaku untuk file/direktori terkompresi yang disimpan secara lokal.

Ketik sumber dan di mana Anda ingin perintah untuk mengekstrak konten sebagai berikut:

ADD source.file.tar.gz /temp

Ingatlah bahwa Anda tidak dapat mengunduh dan mengekstrak file/direktori terkompresi dari URL. Perintah tidak membongkar paket eksternal saat menyalinnya ke sistem file lokal.

Perintah Salin Docker

Karena beberapa masalah fungsionalitas, Docker harus memperkenalkan perintah tambahan untuk menduplikasi konten – COPY .

Tidak seperti ADD yang terkait erat perintah, COPY hanya memiliki satu fungsi yang ditugaskan. Perannya adalah untuk menduplikasi file/direktori di lokasi tertentu dalam format yang ada. Ini berarti bahwa itu tidak berurusan dengan mengekstrak file terkompresi, melainkan menyalinnya apa adanya.

Instruksi hanya dapat digunakan untuk file yang disimpan secara lokal. Oleh karena itu, Anda tidak dapat menggunakannya dengan URL untuk menyalin file eksternal ke penampung Anda.

Untuk menggunakan COPY instruksi, ikuti format perintah dasar:

COPY <src> … <dest> 

Misalnya:

COPY /source/file/path  /destination/path 

Salin Docker vs ADD

Mengapa ada kebutuhan untuk menambahkan perintah baru yang serupa?

Fakta bahwa ADD memiliki begitu banyak fungsi yang terbukti bermasalah dalam praktiknya, karena berperilaku sangat tidak terduga. Hasil dari kinerja yang tidak dapat diandalkan seperti itu sering kali disebabkan oleh penyalinan saat Anda ingin mengekstrak dan ekstraksi saat Anda ingin menyalin.

Docker tidak dapat sepenuhnya mengganti perintah karena banyaknya penggunaan yang ada. Untuk menghindari kompatibilitas mundur, opsi teraman adalah menambahkan COPY command – perintah yang kurang beragam namun lebih andal.

Yang Digunakan (Praktik Terbaik)

Mempertimbangkan keadaan di mana COPY perintah diperkenalkan, terbukti bahwa menjaga ADD adalah suatu keharusan. Docker merilis dokumen resmi yang menguraikan praktik terbaik untuk menulis Dockerfiles, yang secara eksplisit menyarankan untuk tidak menggunakan ADD perintah .

Dokumentasi resmi Docker mencatat bahwa COPY harus selalu menjadi petunjuk masuk karena lebih transparan daripada ADD .

Jika Anda perlu menyalin dari konteks build lokal ke dalam wadah, tetap gunakan COPY .

Tim Docker juga sangat tidak menganjurkan penggunaan ADD untuk mengunduh dan menyalin paket dari URL. Sebaliknya, lebih aman dan lebih efisien menggunakan wget atau ikal dalam RUN memerintah. Dengan melakukannya, Anda menghindari membuat lapisan gambar tambahan dan menghemat ruang.

Katakanlah Anda ingin mengunduh paket terkompresi dari URL, mengekstrak konten, dan membersihkan arsip.

Alih-alih menggunakan ADD dan jalankan perintah berikut:

ADD http://source.file/package.file.tar.gz /temp
RUN tar -xjf /temp/package.file.tar.gz \
  && make -C /tmp/package.file \
  && rm /tmp/ package.file.tar.gz

Anda harus menggunakan:

RUN curl http://source.file/package.file.tar.gz \
  | tar -xjC /tmp/ package.file.tar.gz \
  && make -C /tmp/ package.file.tar.gz

Docker
  1. MySQL vs. MariaDB:Apa Perbedaan Utama Antara Mereka?

  2. Cara memperbarui/menambahkan file di Gambar Docker

  3. Apa perbedaan antara rdesktop dan xfreerdp?

  1. Debian vs Ubuntu:Apa perbedaannya?

  2. 7zip, Xz, Gzip, Tar, Dll — Apa Perbedaannya??

  3. Apa Perbedaan Antara Kernel Terkirim Ubuntu Dan Kernel Hulu?

  1. Apa Perbedaan Antara COPY dan ADD di Dockerfiles?

  2. pfSense vs router Netgear:Apa perbedaan utamanya?

  3. Fedora vs Ubuntu:Apa perbedaan utama?