Saat membuat Dockerfile, ada dua perintah yang dapat Anda gunakan untuk menyalin file / direktori ke dalamnya - ADD
dan COPY
. Meskipun ada sedikit perbedaan dalam lingkup fungsi mereka, mereka pada dasarnya melakukan tugas yang sama.
Jadi, mengapa kita memiliki dua perintah, dan bagaimana kita tahu kapan harus menggunakan satu atau yang lain?
ADD
PERINTAH DOCKER
Mari kita mulai dengan mencatat bahwa ADD
perintahnya lebih tua 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
perintah ini adalah:
ADD <src> … <dest>
Ini termasuk sumber yang ingin Anda salin ( <src>
) diikuti oleh tujuan tempat Anda ingin menyimpannya ( <dest>
). Jika sumbernya adalah direktori,ADD
salin semua yang ada di dalamnya (termasuk metadata sistem file).
Misalnya, jika file tersedia secara lokal dan Anda ingin menambahkannya ke direktori gambar, Anda mengetik:
ADD /source/file/path /destination/path
ADD
juga dapat menyalin file dari URL. Itu dapat mengunduh file eksternal dan menyalinnya ke tujuan yang diinginkan. Sebagai contoh:
ADD http://source.file/url /destination/path
Fitur tambahan adalah bahwa ia menyalin file terkompresi, secara otomatis mengekstraksi konten di tujuan yang diberikan. Fitur ini hanya berlaku untuk file / direktori terkompresi yang disimpan secara lokal.
ADD source.file.tar.gz /temp
Ingatlah bahwa Anda tidak dapat mengunduh dan mengekstrak file / direktori terkompresi dari URL. Perintah tidak membongkar paket eksternal ketika menyalinnya ke sistem file lokal.
BURUH PELABUHAN COPY
PERINTAH
Karena beberapa masalah fungsionalitas, Docker harus memperkenalkan perintah tambahan untuk menggandakan konten - COPY
.
Tidak seperti ADD
perintah yang terkait erat , COPY
hanya memiliki satu fungsi yang ditugaskan. Perannya adalah untuk menduplikasi file / direktori di lokasi yang ditentukan dalam format yang ada. Ini berarti bahwa itu tidak berurusan dengan mengekstraksi file terkompresi, melainkan menyalinnya apa adanya.
Instruksi hanya dapat digunakan untuk file yang disimpan secara lokal. Karenanya, Anda tidak dapat menggunakannya dengan URL untuk menyalin file eksternal ke wadah Anda.
Untuk menggunakan COPY
instruksi, ikuti format perintah dasar:
Ketik sumber dan di mana Anda ingin perintah untuk mengekstrak konten sebagai berikut:
COPY <src> … <dest>
Sebagai contoh:
COPY /source/file/path /destination/path
Perintah mana yang digunakan? (Praktik Terbaik)
Mempertimbangkan keadaan di mana COPY
perintah itu diperkenalkan, jelas bahwa menjaga ADD
adalah masalah kebutuhan. Docker merilis dokumen resmi yang menguraikan praktik terbaik untuk menulis Dockerfiles, yang secara eksplisit menyarankan agar tidak menggunakan ADD
perintah.
Dokumentasi resmi Docker mencatat bahwa COPY
harus selalu menjadi instruksi masuk karena lebih transparan daripada ADD
.
Jika Anda perlu menyalin dari konteks pembangunan lokal ke dalam wadah, tetap gunakan COPY
.
Tim Docker juga sangat tidak menyarankan ADD
untuk mengunduh dan menyalin paket dari URL. Sebaliknya, lebih aman dan lebih efisien untuk menggunakan wget atau curl dalam sebuah RUN
perintah. Dengan melakukannya, Anda menghindari membuat lapisan gambar tambahan dan menghemat ruang.