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

Apa Perbedaan Antara Instruksi COPY dan ADD di Dockerfile?

Anda baru mengenal Docker dan sedang belajar membuat image Docker kustom menggunakan Dockerfile.

Anda menemukan berbagai instruksi Dockerfile seperti FROM, RUN dll.

Kemudian Anda menemukan SALIN dan TAMBAH dan menyadari bahwa kedua instruksi melakukan pekerjaan yang sama; salin file dan direktori ke image Docker Anda yang dimodifikasi dari host.

Mengapa Dockerfile memiliki dua perintah untuk tugas yang sama? Apakah ada perbedaan antara keduanya? Memang. Mereka memiliki tujuan yang sama tetapi dalam hal perilaku, mereka berbeda.

Biarkan saya menjelaskannya untuk Anda.

Dockerfile TAMBAHKAN vs SALIN

ADD dan COPY keduanya dirancang untuk menambahkan direktori dan file ke image Docker Anda.

Instruksi ADD relatif lebih lama dan mampu lebih dari sekadar menyalin file dan direktori. ADD dapat menarik file dari URL eksternal. Itu juga dapat mengekstrak file terkompresi dengan asumsi mendukung format arsip. Ini juga terkadang menimbulkan masalah jika ADD tidak dapat mendukung format arsip.

Jika ADD dapat melakukan semua ini, mengapa kita memiliki COPY? Itu karena perintah Docker telah direstrukturisasi beberapa kali sejauh ini. Fokusnya adalah pada penyediaan struktur perintah yang sederhana, lugas, dan lebih ramping.

COPY diperkenalkan sebagai pengganti langsung untuk ADD. COPY hanya menyalin file dan direktori. Itu dia. Untuk mengunduh dan mengekstrak file, perintah Linux biasa seperti curl dan tar digunakan dengan instruksi RUN.

Inilah alasan mengapa COPY direkomendasikan akhir-akhir ini dan Anda hanya akan menemukan ADD di tutorial dan dokumentasi yang lebih lama.

ADD adalah instruksi lama yang dapat mengunduh dan mengekstrak file selain menyalinnya ke gambar dari host. COPY hanya dapat menyalin file dan direktori. Salin dianjurkan hari ini.

Lihat lebih dekat Instruksi TAMBAH

Instruksi ADD memiliki tiga kemampuan berikut:

1. Menyalin file lokal ke dalam gambar kontainer

Katakan misalnya, jika Anda ingin menyalin file lokal pada sistem host dari /home/user/application ke dalam /opt/app pada gambar Docker Anda, Anda dapat memasukkan instruksi berikut di dalam file Docker Anda:

ADD /home/user/application /opt/app

Di sini, hanya konten /home/user/application direktori disalin ke /opt/app termasuk metadatanya. Itu tidak akan menyalin application direktori itu sendiri.

2. Ekstraksi file tar yang disimpan secara lokal

Anda juga dapat menggunakan instruksi ADD untuk mengekstrak arsip terkompresi dengan format - identitas , gzip , bzip2 atau xz . Konten dibongkar sebagai direktori di dalam lokasi tujuan image Docker yang Anda buat.

ADD /home/user/test.tar.gz /opt

Perilakunya mirip dengan apa yang terjadi saat Anda menggunakan perintah tar untuk mengekstrak tarball ke direktori tertentu di sistem host Anda.

3. Unduh file dari URL

Ini mirip dengan bagaimana wget -P berfungsi tetapi untuk Dockerfiles. Saat membuat image Docker, Anda dapat menggunakan instruksi berikut untuk mendownload file dan menyimpannya di lokasi yang diinginkan pada image container Anda:

ADD https://filesamples.com/samples/document/pdf/sample2.pdf /home/user

Setelah gambar dibuat, Anda dapat memiliki dokumen PDF ini terlebih dahulu, Anda meluncurkan wadah berdasarkan itu. Ini adalah salah satu dari banyak kasus penggunaan yang unik.

Petunjuk SALIN

Instruksi COPY adalah evolusi dari instruksi ADD yang dirancang untuk mengurangi kebingungan di antara pengguna Docker. Fungsinya hanya satu - menyalin file atau direktori dari lokasi sumber pada host ke lokasi tujuan pada gambar Docker.

Jadi, pada dasarnya ini adalah poin pertama di bagian instruksi ADD yang telah dibahas di atas. Instruksi yang sesuai adalah:

COPY /home/user/application /opt/app

Sebagai praktik terbaik, pengembang di Docker secara resmi merekomendasikan penggunaan instruksi di atas untuk menghindari kebingungan.

Jadi jika Anda hanya ingin menyalin file atau direktori, Anda harus menggunakan instruksi COPY saja. Coba dan hindari menggunakan ADD sedapat mungkin. Gunakan instruksi RUN dengan perintah Linux biasa untuk mengunduh dan mengekstrak file.

Semoga Anda sekarang dapat memahami perbedaan mendasar antara kedua instruksi tersebut. Untuk memahaminya satu per satu, Anda dapat melihat referensi ADD dan COPY yang resmi dan lengkap.

Jika Anda memiliki saran, masukan, atau komentar untuk dibagikan tentang perbandingan di atas, silakan tinggalkan pemikiran Anda di bagian bawah.


Docker
  1. Perbedaan Antara [[ $a ==Z* ]] Dan [ $a ==Z* ]?

  2. Apa Perbedaan Antara cPanel Dan WHM?

  3. Apa perbedaan antara $(CC) dan $CC?

  1. Apa perbedaan antara InnoDB dan MyISAM?

  2. Apa Perbedaan Antara COPY dan ADD di Dockerfiles?

  3. Apa perbedaan antara strtok_r dan strtok_s di C?

  1. Apa perbedaan antara fsck dan e2fsck?

  2. Apa perbedaan antara adduser dan useradd?

  3. Apa perbedaan antara ls dan l?