Dockerfile'da 'COPY' ve 'ADD' Komutları Arasındaki Farkları Anlamak

Dockerfile

Dockerfile Komutlarının Açıklaması

Dockerfile'daki 'COPY' ve 'ADD' komutları, dosyaları kapsayıcınızın dosya sistemine tanıtmaya yarar, ancak farklı işlevler ve en iyi kullanım senaryolarıyla birlikte gelirler. Bu farklılıkları anlamak, verimli Dockerfile yönetimi ve konteynerli uygulamalarınızın beklendiği gibi performans göstermesini sağlamak için çok önemlidir.

'COPY' öncelikli olarak doğrudan dosya kopyalama için kullanılırken, 'ADD' uzak URL'leri işlemek ve sıkıştırılmış dosyaları çıkarmak gibi ek yetenekler sunar. Bu makale, her komutun nüanslarını inceleyerek Docker yapılarınızı optimize etmek için birini diğerinin üzerine ne zaman kullanmanız gerektiği konusunda size yol gösterecektir.

Emretmek Tanım
FROM Oluşturulmakta olan Docker görüntüsü için kullanılacak temel görüntüyü belirtir.
WORKDIR Kabın içindeki çalışma dizinini ayarlar.
COPY Dosyaları veya dizinleri ana bilgisayardan kabın dosya sistemine kopyalar.
ADD Kapsayıcının dosya sistemine dosyalar, dizinler veya uzak URL'ler ekler ve dosya çıkarma işlemini gerçekleştirebilir.
RUN Kapsayıcının ortamında bir komutu yürütür.
EXPOSE Docker'a kapsayıcının çalışma zamanında belirtilen ağ bağlantı noktalarını dinlediğini bildirir.

Dockerfile Komutlarının Ayrıntılı Açıklaması

İlk komut dosyası kullanımını gösterir Docker dosyasındaki komut. talimat basittir ve dosyaları veya dizinleri ana bilgisayar sisteminden Docker konteynerinin dosya sistemine kopyalamak için kullanılır. Bu örnekte, komut dosyası şununla başlar: Temel görüntüyü şu şekilde belirten komut: python:3.8-slim-buster . komut, kabın içindeki çalışma dizinini şu şekilde ayarlar: . Bunu şu takip eder: Ana bilgisayardaki geçerli dizinin içeriğini sunucuya kopyalayan komut /app kapsayıcıdaki dizin. Dosyaları kopyaladıktan sonra komutu, belirtilen gerekli Python paketlerini yüklemek için kullanılır. dosya. Son olarak, komutu, 80 numaralı bağlantı noktasını dış dünyaya açık hale getirir.

Buna karşılık, ikinci komut dosyası, Docker dosyasındaki komut. İlk senaryoya benzer şekilde, şu şekilde başlar: Temel görüntüyü ayarlama komutu ve çalışma dizinini tanımlama komutu. Buradaki en önemli fark, ADD uzak bir URL'den dosya eklemek için kullanılan komut, bu durumda, . komut yalnızca dosyaları kopyalamakla kalmaz, aynı zamanda sonraki örnekte gösterildiği gibi sıkıştırılmış dosyaları otomatik olarak çıkarma yeteneğine de sahiptir. ayıklayan komut archive.tar.gz içine dosya dizin. Bunu takiben, komutu gerekli Python paketlerini yükler ve komutu 80 numaralı bağlantı noktasını kullanılabilir hale getirir.

Docker dosyasında COPY'yi kullanma

Docker dosyası örneği

# 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

Dockerfile'da ADD'yi kullanma

Docker dosyası örneği

# 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

Dockerfile'da COPY ve ADD'nin Derinlemesine Analizi

Her ikisi de Ve komutlar, dosyaları ana bilgisayar sisteminden kabın dosya sistemine kopyalama amacına hizmet eder; farklı özelliklere ve her birini farklı senaryolara uygun kılan kullanım durumlarına sahiptirler. komut daha basit ve daha öngörülebilirdir. Arşivlerin çıkarılması veya uzak dosyaların getirilmesi gibi hiçbir ek işlemin gerekli olmadığı temel dosya kopyalama için en iyi şekilde kullanılır. Bu komut, yalnızca yerel dosyaların ve dizinlerin konteynere kopyalanmasını sağlar, böylece temiz ve güvenli bir yapı ortamı korunur.

Öte yandan, komutu daha fazla işlevsellik sağlar ancak ek karmaşıklık ve olası güvenlik riskleriyle birlikte gelir. komut, URL indirmelerini işleyebilir ve aşağıdakiler gibi sıkıştırılmış dosyaları otomatik olarak çıkarabilir: , .gzip, Ve . Bu, derleme sürecinizin, görüntü oluşturma sırasında çıkarılması gereken uzak varlıklar veya arşivler gerektirdiği durumlarda faydalı olabilir. Ancak bu ekstra özellikler, dosyaların yanlışlıkla üzerine yazılması ve uzak konumlardan indirirken güvenlik açıkları gibi riskleri de beraberinde getirir. Bu nedenle, aralarında karar verirken bu faktörleri dikkatlice dikkate almak çok önemlidir. Ve .

Dockerfile'da COPY ve ADD ile ilgili Sık Sorulan Sorular ve Cevaplar

  1. Birincil kullanımı nedir? Docker dosyasındaki komut?
  2. komutu öncelikle yerel dosyaları ve dizinleri ana bilgisayar sisteminden Docker kapsayıcısına kopyalamak için kullanılır.
  3. Ne zaman kullanmalısınız? bunun yerine komut ?
  4. Şunu kullanmalısın: Bir URL'den dosya kopyalamanız gerektiğinde veya derleme işlemi sırasında sıkıştırılmış dosyaları çıkarmanız gerektiğinde bu komutu kullanabilirsiniz.
  5. kullanmanın güvenlik açısından sonuçları nelerdir? emretmek?
  6. komutu, potansiyel olarak mevcut dosyaların üzerine yazabileceği veya güvenlik açıkları oluşturabileceği için, özellikle uzak URL'lerden dosya indirirken güvenlik riskleri oluşturabilir.
  7. Kutu sıkıştırılmış dosyaları çıkarma komutu?
  8. Hayır, komutun sıkıştırılmış dosyaları çıkarma özelliği yoktur; onları oldukları gibi kopyalar.
  9. Nasıl sıkıştırılmış dosyaları farklı şekilde işleme ?
  10. komut, aşağıdaki gibi sıkıştırılmış dosyaları otomatik olarak çıkarır: , , Ve .bzip2 konteynere eklendiklerinde.
  11. ile joker karakterler kullanmak mümkün mü? emretmek?
  12. Evet, joker karakterleri kullanabilirsiniz. bir kalıpla eşleşen birden fazla dosya veya dizini kopyalama komutu.
  13. Bir URL sağlanırsa ne olur? komuta ulaşılamıyor mu?
  14. Bir URL sağlanırsa komutuna ulaşılamıyorsa Docker oluşturma işlemi başarısız olur.
  15. Basit, yerel dosya kopyalama işlemi için hangi komutu kullanmalısınız?
  16. Basit, yerel dosya kopyalama işlemleri için Daha basit ve güvenli olduğundan komut verin.
  17. Kutu komutu hem yerel hem de uzak kaynaklardan dosya eklemek için kullanılabilir mi?
  18. Evet komutu, hem yerel kaynaklardan hem de uzak URL'lerden dosyalar ekleyebilir, bu da onu belirli senaryolarda daha çok yönlü hale getirir.

Ne zaman kullanılacağını anlamak Ve Dockerfile'ınızda konteyner yapılarınızı optimize etmek için gereklidir. Sırasında Yerel dosyalar için basit ve güvenlidir, ADD ilave karmaşıklık ve potansiyel güvenlik endişeleri pahasına ekstra yetenekler sağlar. Özel ihtiyaçlarınıza göre doğru komutu seçmek Docker görüntülerinizin verimliliğini ve güvenliğini artırabilir.