Bir Dockerfile oluştururken, dosyaları / dizinleri içine kopyalamak için kullanabileceğiniz iki komut vardır - ADD
ve COPY
. İşlevlerinin kapsamı arasında küçük farklılıklar olsa da, aslında aynı görevi yerine getirirler.
Peki, neden iki komutumuz var ve birini veya diğerini ne zaman kullanacağımızı nasıl biliyoruz?
DOCKER ADD
KOMUTANLIĞI
ADD
Komutun daha eski olduğunu belirterek başlayalım COPY
. Docker platformunun lansmanından bu yana, ADD
talimat komutlar listesinin bir parçası olmuştur.
Komut dosyaları / dizinleri belirtilen kapsayıcıdaki bir dosya sistemine kopyalar.
ADD
Komutun temel sözdizimi :
ADD <src> … <dest>
Kopyalamak istediğiniz kaynağı ( <src>
) ve ardından saklamak istediğiniz hedefi ( <dest>
) içerir. Kaynak bir ADD
dizinse içindeki her şeyi kopyalar (dosya sistemi meta verileri dahil).
Örneğin, dosya yerel olarak kullanılabiliyorsa ve dosyayı bir görüntünün dizinine eklemek istiyorsanız, şunu yazın:
ADD /source/file/path /destination/path
ADD
URL'den de dosya kopyalayabilir. Harici bir dosya indirebilir ve istenen hedefe kopyalayabilir. Örneğin:
ADD http://source.file/url /destination/path
Ek bir özellik, sıkıştırılmış dosyaları kopyalaması ve verilen hedefteki içeriği otomatik olarak çıkarmasıdır. Bu özellik yalnızca yerel olarak depolanan sıkıştırılmış dosyalar / dizinler için geçerlidir.
ADD source.file.tar.gz /temp
Sıkıştırılmış bir dosyayı / dizini bir URL'den indiremeyeceğinizi ve çıkaramayacağınızı unutmayın. Komut, yerel paketleri sisteme kopyalarken harici paketleri açmaz.
DOCKER COPY
KOMUTANLIĞI
Bazı işlevsellik sorunları nedeniyle Docker, içeriği çoğaltmak için ek bir komut vermek zorunda kaldı COPY
.
Yakından ilişkili ADD
komutunun aksine COPY
, yalnızca bir atanmış işlevi vardır. Rolü, dosyaları / dizinleri belirli bir konumda varolan biçimlerinde çoğaltmaktır. Bu, sıkıştırılmış bir dosyanın çıkarılmasıyla ilgilenmediği, aksine olduğu gibi kopyaladığı anlamına gelir.
Talimat yalnızca yerel olarak saklanan dosyalar için kullanılabilir. Bu nedenle, harici dosyaları kapsayıcınıza kopyalamak için URL'lerle kullanamazsınız.
COPY
Talimatı kullanmak için temel komut biçimini izleyin:
Kaynağı ve komutun içeriği aşağıdaki gibi ayıklamasını istediğiniz yeri yazın:
COPY <src> … <dest>
Örneğin:
COPY /source/file/path /destination/path
Hangi komutu kullanmalı? (En İyi Uygulama)
Komutanın COPY
getirildiği koşullar düşünüldüğünde, tutmanın ADD
bir zorunluluk meselesi olduğu açıktır . Docker, Dockerfiles yazmak için en iyi uygulamaları özetleyen resmi bir belge yayınladı.ADD
.
Docker'ın resmi dokümantasyonu COPY
, her zamankinden daha şeffaf olduğu için her zaman talimat olması gerektiğini not eder ADD
.
Yerel derleme bağlamından bir kaba kopyalamanız gerekiyorsa, kullanmaya devam edin COPY
.
Docker ekibi ayrıca ADD
bir URL'den bir paket indirmek ve kopyalamak için kullanılmasını kesinlikle önermez . Bunun yerine, bir RUN
komut içinde wget veya curl kullanmak daha güvenli ve daha verimlidir . Bunu yaparak, ek bir görüntü katmanı oluşturmaktan kaçınır ve yerden tasarruf edersiniz.