CodeBlanks Logo Icon CodeBlanks

COPY ve ADD

COPY ile dosyaları image'a kopyalamayı öğrenirsin.

COPY ve ADD

COPY kaynak hedef, build context'teki (genellikle proje klasörü) dosyaları image'a kopyalar. Hedef / ile bitiyorsa dizindir; WORKDIR ayarlıysa göreli yol ona göre çözülür:

WORKDIR /app
COPY requirements.txt .        # /app/requirements.txt
COPY src/ ./src/               # klasörü kopyala
COPY --chown=node:node . .     # sahipliği ayarla

Neden önce bağımlılık dosyası?

Bağımlılık listesini kaynak koddan önce ayrı kopyalamak önbelleği iyi kullanır: kod değiştiğinde yalnızca son katmanlar yeniden oluşturulur, uzun süren paket kurulumu önbellekten gelir:

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt   # yalnızca requirements değişince çalışır
COPY . .                                             # kod değişince yalnızca bu katman

Uygulama Önbellek dostu kopyalama

python:3.12-slim tabanlı, WORKDIR /app olan bir Dockerfile yaz: önce requirements.txt'yi kopyala, pip install --no-cache-dir -r requirements.txt çalıştır, sonra projenin tamamını kopyala.

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .

Beklenen çıktı

[+] Building 4.2s (8/8) FINISHED
 => naming to docker.io/library/api:latest done

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 ADD'in COPY'den farklı olarak yaptığı nedir?

  • Yalnızca klasör kopyalar
  • Yerel tar arşivlerini açar ve URL'den indirebilir Doğru cevap
  • Dosyaları siler
  • Daha hızlı kopyalar

Açıklama: Bu "sihirli" davranışlar sürprize yol açtığı için COPY tercih edilir.

2 Kopyalanan dosyaların sahibini ayarla.

Soru
COPY ____=node:node . .
Cevap
COPY --chown=node:node . .

Açıklama: --chown kullanıcı:grup verir.

3 Eşleştir.

Kavram Anlamı
COPY Context'ten kopyalar
ADD tar açar, URL indirir
COPY . . Tüm projeyi kopyalar
önce requirements.txt Önbellek dostu sıra

Başlangıç bölümündeki tüm dersler