Memahami Perbedaan Antara Perintah 'COPY' dan 'ADD' di Dockerfile

Dockerfile

Perintah Dockerfile Dijelaskan

Perintah 'COPY' dan 'ADD' di Dockerfile berfungsi untuk memasukkan file ke dalam sistem file container Anda, namun keduanya memiliki fungsi berbeda dan skenario penggunaan terbaik. Memahami perbedaan-perbedaan ini sangat penting untuk manajemen Dockerfile yang efisien dan memastikan aplikasi dalam container Anda bekerja seperti yang diharapkan.

Meskipun 'COPY' terutama digunakan untuk menyalin file secara mudah, 'ADD' menawarkan kemampuan tambahan, seperti menangani URL jarak jauh dan mengekstraksi file terkompresi. Artikel ini akan mengeksplorasi nuansa setiap perintah, memandu Anda kapan harus menggunakan salah satu perintah untuk mengoptimalkan build Docker Anda.

Memerintah Keterangan
FROM Menentukan gambar dasar yang akan digunakan untuk gambar Docker yang sedang dibuat.
WORKDIR Menetapkan direktori kerja di dalam wadah.
COPY Menyalin file atau direktori dari host ke sistem file penampung.
ADD Menambahkan file, direktori, atau URL jarak jauh ke sistem file penampung dan dapat menangani ekstraksi file.
RUN Menjalankan perintah di lingkungan kontainer.
EXPOSE Memberi tahu Docker bahwa kontainer mendengarkan port jaringan yang ditentukan saat runtime.

Penjelasan Mendetail tentang Perintah Dockerfile

Skrip pertama menunjukkan penggunaan perintah di Dockerfile. Itu instruksinya mudah dan digunakan untuk menyalin file atau direktori dari sistem host ke sistem file kontainer Docker. Dalam contoh ini, skrip dimulai dengan perintah, yang menentukan gambar dasar sebagai python:3.8-slim-buster . Itu perintah menyetel direktori kerja di dalam wadah ke . Ini diikuti oleh perintah, yang menyalin isi direktori saat ini pada host ke /app direktori dalam wadah. Setelah menyalin file, perintah digunakan untuk menginstal paket Python yang diperlukan yang ditentukan dalam mengajukan. Akhirnya, itu perintah membuat port 80 tersedia untuk dunia luar.

Sebaliknya, skrip kedua menyoroti penggunaan perintah di Dockerfile. Mirip dengan skrip pertama, ini dimulai dengan perintah untuk mengatur gambar dasar dan perintah untuk menentukan direktori kerja. Perbedaan utama di sini adalah ADD perintah, yang digunakan untuk menambahkan file dari URL jarak jauh, dalam hal ini, . Itu perintah tidak hanya menyalin file tetapi juga memiliki kemampuan untuk mengekstrak file terkompresi secara otomatis, seperti yang ditunjukkan selanjutnya perintah yang mengekstrak archive.tar.gz mengajukan ke dalam direktori. Setelah ini, perintah menginstal paket Python yang diperlukan, dan perintah membuat port 80 tersedia.

Menggunakan COPY di Dockerfile

Contoh File Docker

# Use an official Python runtime as a parent image
FROM python:3.8-slim-buster

# Set the working directory in the container
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

Menggunakan ADD di Dockerfile

Contoh File Docker

# Use an official Python runtime as a parent image
FROM python:3.8-slim-buster

# Set the working directory in the container
WORKDIR /app

# Add files from a remote URL
ADD https://example.com/data/archive.tar.gz /app/

# Extract the archive file
RUN tar -xzf /app/archive.tar.gz -C /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

Analisis Mendalam tentang COPY dan ADD di Dockerfile

Sementara keduanya Dan perintah melayani tujuan menyalin file dari sistem host ke sistem file kontainer, mereka memiliki fitur dan kasus penggunaan berbeda yang membuatnya sesuai dalam skenario berbeda. Itu perintah lebih sederhana dan lebih dapat diprediksi. Paling baik digunakan untuk penyalinan file dasar yang tidak memerlukan proses tambahan, seperti mengekstraksi arsip atau mengambil file jarak jauh. Perintah ini memastikan bahwa hanya file dan direktori lokal yang disalin ke dalam container, sehingga menjaga lingkungan build yang bersih dan aman.

Di sisi lain, perintah menyediakan lebih banyak fungsionalitas tetapi dengan kompleksitas tambahan dan potensi risiko keamanan. Itu perintah dapat menangani pengunduhan URL dan secara otomatis mengekstrak file terkompresi seperti , .gzip, Dan . Hal ini dapat bermanfaat jika proses pembangunan Anda memerlukan aset atau arsip jarak jauh yang perlu diekstraksi selama pembuatan gambar. Namun, fitur tambahan ini memiliki risiko, seperti penimpaan file yang tidak disengaja dan kerentanan keamanan saat mengunduh dari lokasi yang jauh. Oleh karena itu, sangat penting untuk mempertimbangkan faktor-faktor ini dengan cermat ketika memutuskan di antara keduanya Dan .

Pertanyaan dan Jawaban Umum tentang COPY dan ADD di Dockerfile

  1. Apa kegunaan utama dari perintah di Dockerfile?
  2. Itu perintah ini terutama digunakan untuk menyalin file dan direktori lokal dari sistem host ke dalam wadah Docker.
  3. Kapan sebaiknya Anda menggunakan perintah sebagai gantinya ?
  4. Anda harus menggunakan perintah ketika Anda perlu menyalin file dari URL atau ketika Anda perlu mengekstrak file terkompresi selama proses pembuatan.
  5. Apa implikasi keamanan dari penggunaan memerintah?
  6. Itu perintah dapat menimbulkan risiko keamanan, terutama saat mengunduh file dari URL jarak jauh, karena berpotensi menimpa file yang sudah ada atau menimbulkan kerentanan.
  7. Bisakah perintah ekstrak file terkompresi?
  8. Tidak, itu perintah tidak memiliki kemampuan untuk mengekstrak file terkompresi; itu hanya menyalinnya apa adanya.
  9. Bagaimana menangani file terkompresi secara berbeda dari ?
  10. Itu perintah secara otomatis mengekstrak file terkompresi seperti , , Dan .bzip2 ketika mereka ditambahkan ke wadah.
  11. Apakah mungkin menggunakan wildcard dengan memerintah?
  12. Ya, Anda dapat menggunakan wildcard dengan perintah untuk menyalin beberapa file atau direktori yang cocok dengan suatu pola.
  13. Apa yang terjadi jika URL diberikan ke perintah tidak dapat dijangkau?
  14. Jika URL diberikan ke perintah tidak dapat dijangkau, proses pembuatan Docker akan gagal.
  15. Perintah mana yang harus Anda gunakan untuk operasi penyalinan file lokal yang sederhana?
  16. Untuk operasi penyalinan file lokal yang sederhana, Anda harus menggunakan perintah karena lebih mudah dan aman.
  17. Bisakah perintah digunakan untuk menambahkan file dari sumber lokal dan jarak jauh?
  18. Ya, itu perintah dapat menambahkan file dari sumber lokal dan URL jarak jauh, membuatnya lebih serbaguna dalam skenario tertentu.

Memahami kapan harus menggunakan Dan di Dockerfile Anda sangat penting untuk mengoptimalkan build container Anda. Ketika mudah dan aman untuk file lokal, ADD memberikan kemampuan ekstra dengan mengorbankan kompleksitas tambahan dan potensi masalah keamanan. Memilih perintah yang tepat berdasarkan kebutuhan spesifik Anda dapat meningkatkan efisiensi dan keamanan image Docker Anda.