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.