Dockerfile'de 'COPY' ve 'ADD' komutlar─▒ aras─▒ndaki fark nedir?


Al─▒nan cevaba git


Bir Docker dosyas─▒ndaki COPY ve ADD komutlar─▒ aras─▒ndaki fark nedir ve birini di─čerinden ne zaman kullan─▒r─▒m?

 COPY <src> <dest>
 

COPY komutu, yeni dosyalar─▒ kopyalar <src> ve yolundaki kapsay─▒c─▒lar─▒n dosya sistemine ekler. <dest>

 ADD <src> <dest>
 

<src> Ekleme talimat─▒, yeni dosyalar─▒ kopyalar ve yolundaki kapsay─▒c─▒lar─▒n dosya sistemine ekler <dest> .


1953









Cevap say─▒s─▒n─▒ say: 11






Davran─▒┼člar─▒n─▒n ayr─▒nt─▒l─▒ bir a├ž─▒klamas─▒ i├žin ADD ve COPY belgelerini kontrol etmelisiniz , ancak k─▒saca, as─▒l fark ┼čundan ADD daha fazlas─▒n─▒ yapabilendir COPY :

  • ADD <src> URL olmas─▒na izin verir
  • A┼ča─č─▒daki yorumlara at─▒fta bulunuldu─čunda, ADD belgeler a├ž─▒k├ža ┼čunu belirtir:

    Tan─▒nan bir s─▒k─▒┼čt─▒rma bi├žiminde yerel bir katran ar┼čivi ise (kimlik, gzip, bzip2 veya xz), o zaman bir dizin olarak a├ž─▒l─▒r. Uzak URLÔÇÖlerden gelen kaynaklar a├ž─▒lmaz.

Dockerfiles yazmak i├žin en iyi y├Ântemlerin COPY , sihrin ADD gerekli olmad─▒─č─▒ durumlarda kullan─▒lmas─▒n─▒ ├Ânerdi─čini unutmay─▒n. Aksi taktirde siz (bu cevab─▒ araman─▒z gerekti─činden), bir g├╝n kab─▒n─▒za kopyalamak istedi─činizde bir g├╝n ┼ča┼č─▒rman─▒z muhtemeldir keep_this_archive_intact.tar.gz , fakat bunun yerine i├žerikleri dosya sisteminize p├╝sk├╝rt├╝n.


1957







COPY oldu─ču

'EKLE' ile ayn─▒d─▒r, ancak katran ve uzak URL i┼čleme yoktur.

Kaynak kodundan do─črudan referans al─▒n .


417







Bu noktada baz─▒ resmi belgeler var: Dockerfiles Yazma ─░├žin En ─░yi Uygulamalar

G├Âr├╝nt├╝ boyutu ├Ânemli oldu─čundan, ADD uzak URLÔÇÖlerden paket almak i├žin kullan─▒lmas─▒ kesinlikle ├Ânerilmez; curl ya da wget yerine kullanmal─▒s─▒n─▒z . Bu ┼čekilde, art─▒k ├ž─▒kar─▒ld─▒ktan sonra ihtiya├ž duymad─▒─č─▒n─▒z dosyalar─▒ silebilir ve g├Âr├╝nt├╝n├╝ze ba┼čka bir katman eklemek zorunda kalmazs─▒n─▒z.

 RUN mkdir -p /usr/src/things \
  && curl -SL http://example.com/big.tar.gz \
    | tar -xJC /usr/src/things \
  && make -C /usr/src/things all
 

ADD Katran otomatik ├ž─▒karma ├Âzelli─čini gerektirmeyen di─čer ├Â─čeler (dosyalar, dizinler) i├žin her zaman kullanman─▒z gerekir COPY .


134







Docker belgelerinden:

EKLE veya KOPYA

ADD ve COPY, i┼člevsel olarak benzer olmas─▒na ra─čmen, genel olarak konu┼čursak, COPY tercih edilir. Bunun nedeni ADD'den daha ┼čeffaf olmas─▒d─▒r. COPY, yerel dosyalar─▒n yaln─▒zca kaba kopyalanmas─▒n─▒ destekler; ADD ise hemen a├ž─▒k olmayan baz─▒ ├Âzelliklere (yaln─▒zca yerel tar tar ├ž─▒karma ve uzak URL deste─či gibi) sahiptir. Sonu├ž olarak, ADD i├žin en iyi kullan─▒m, ADD rootfs.tar.xz / 'de oldu─ču gibi g├Âr├╝nt├╝ye yerel katran otomatik dosya g├Âr├╝nt├╝s├╝d├╝r.

Daha fazla: Dockerfiles yazmak i├žin en iyi y├Ântemler


111


2015-08-10





Bir /usr/local kap i├žerisine xx.tar.gz eklemek istiyorsan─▒z , a├ž─▒n ve sonra gereksiz s─▒k─▒┼čt─▒r─▒lm─▒┼č paketi ├ž─▒kar─▒n.

KOPYA i├žin:

 COPY resources/jdk-7u79-linux-x64.tar.gz /tmp/
RUN tar -zxvf /tmp/jdk-7u79-linux-x64.tar.gz -C /usr/local
RUN rm /tmp/jdk-7u79-linux-x64.tar.gz
 

Eklemek i├žin:

 ADD resources/jdk-7u79-linux-x64.tar.gz /usr/local/
 

ADD, yaln─▒zca yerel katran ├ž─▒kartmas─▒n─▒ destekler. Bunun yan─▒nda, COPY ├╝├ž katman kullanacak, ancak ADD sadece bir katman kullanacakt─▒r.


39







Docker belgelerinden: https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#add-or-copy

"ADD ve COPY, i┼člevsel olarak benzer olmas─▒na ra─čmen, genel olarak konu┼čsa da, COPY tercih edilir. Bunun nedeni, ADD'den daha ┼čeffaf olmas─▒d─▒r. COPY, yaln─▒zca yerel dosyalar─▒n kaba kopyalanmas─▒n─▒ destekler; uzak URL deste─či) hemen belli de─čildir.Bu nedenle, ADD i├žin en iyi kullan─▒m, ADD rootfs.tar.xz / 'de oldu─ču gibi, g├Âr├╝nt├╝ye yerel katran otomatik dosya g├Âr├╝nt├╝s├╝d├╝r.

Ba─člam─▒n─▒zdan farkl─▒ dosyalar kullanan birden fazla Dockerfile ad─▒m─▒ varsa, hepsini bir kerede de─čil, tek tek KOPYALA. Bu, ├Âzel olarak gereken dosyalar de─či┼čirse, her bir ad─▒m─▒n olu┼čturma ├Ânbelle─činin yaln─▒zca ge├žersiz k─▒l─▒nmas─▒n─▒ (ad─▒m─▒n ├žal─▒┼čt─▒r─▒lmas─▒n─▒ zorlayarak) sa─člayacakt─▒r.

├ľrne─čin:

  COPY requirements.txt /tmp/
 RUN pip install --requirement /tmp/requirements.txt
 COPY . /tmp/
 

RUN ad─▒m─▒ i├žin COPY'yi koyman─▒za g├Âre daha az ├Ânbellek ge├žersizli─či ile sonu├žlan─▒r. / tmp / ondan ├Ânce.

G├Âr├╝nt├╝ boyutu ├Ânemli oldu─čundan, uzak URLÔÇÖlerden paket almak i├žin ADD kullanmak kesinlikle ├Ânerilmez; Bunun yerine curl veya wget kullanmal─▒s─▒n─▒z. Bu ┼čekilde, art─▒k ├ž─▒kar─▒ld─▒ktan sonra ihtiya├ž duymad─▒─č─▒n─▒z dosyalar─▒ silebilir ve g├Âr├╝nt├╝n├╝ze ba┼čka bir katman eklemek zorunda kalmazs─▒n─▒z. ├ľrne─čin, ┼č├Âyle ┼čeyler yapmaktan ka├ž─▒nmal─▒s─▒n─▒z:

  ADD http://example.com/big.tar.xz /usr/src/things/
 RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
 RUN make -C /usr/src/things all
 

Bunun yerine, ┼č├Âyle bir ┼čey yap─▒n:

  RUN mkdir -p /usr/src/things \
     && curl -SL htt,p://example.com/big.tar.xz \
     | tar -xJC /usr/src/things \
     && make -C /usr/src/things all
 

ADD'nin katranl─▒ otomatik ├ž─▒karma ├Âzelli─čini gerektirmeyen di─čer ├Â─čeler (dosyalar, dizinler) i├žin her zaman COPY kullanmal─▒s─▒n─▒z. "


14


2016-06-12





COPY bir dosyay─▒ / dizini ana makinenizden resminize kopyalar.

ADD bir dosyay─▒ / dizini ana makinenizden resminize kopyalar, ancak uzak URL'leri de alabilir, TAR dosyalar─▒n─▒ ├ž─▒karabilir vb.

COPY Dosyalar─▒ ve / veya dizinleri derleme ba─člam─▒na kopyalamak i├žin kullan─▒n .

Kullan ADD vb, uzaktan kaynaklar─▒ indirme TAR dosyalar─▒n ay─▒klanmas─▒ i├žin ..


9







Kaynak: https://nickjanetakis.com/blog/docker-tip-2-the-difference-between-copy-and-add-in-a-dockerile :

COPY ve ADD, benzer ama├žlara hizmet eden Dockerfile y├Ânergeleridir. Dosyalar─▒ belirli bir konumdan Docker g├Âr├╝nt├╝s├╝ne kopyalaman─▒za izin verir.

COPY bir src ve hedef al─▒r. Yaln─▒zca yerel bir dosyaya veya dizine ana makinenizden (Docker resmini olu┼čturan makine) Docker resminin kendisine kopyalaman─▒z─▒ sa─člar.

ADD bunu da yapman─▒z─▒ sa─člar, ancak di─čer 2 kayna─č─▒ da destekler. ─░lk ├Ânce, yerel bir dosya / dizin yerine bir URL kullanabilirsiniz. ─░kincisi, bir tar dosyas─▒n─▒ kaynaktan do─črudan hedefe ├ž─▒karabilirsiniz.

ADD i├žin ge├žerli bir kullan─▒m durumu, yerel bir tar dosyas─▒n─▒ Docker resminizdeki belirli bir dizine ├ž─▒karmak istedi─činizde olabilir.

Yerel dosyalarda Docker resminize kopyalama yap─▒yorsan─▒z, her zaman COPY kullan─▒n, ├ž├╝nk├╝ daha a├ž─▒kt─▒r.


5







├ľnemli Not

COPY Docker imaj─▒mda java paketini a├žmak zorunda kald─▒m . ADD kullan─▒larak olu┼čturulan liman g├Âr├╝nt├╝ boyutunu kar┼č─▒la┼čt─▒rd─▒─č─▒mda, COPY, tar -xzf * .tar.gz ve rm * .tar.gz kullan─▒larak olu┼čturulandan 180 MB daha b├╝y├╝kt├╝.

Bu, ADD'nin tar dosyas─▒n─▒ kald─▒rmas─▒na ra─čmen, hala bir yerlerde tutuldu─ču anlam─▒na gelir. Ve g├Âr├╝nt├╝y├╝ daha b├╝y├╝k yap─▒yor !!


3







Docker 17.05 COPY , --from bayra─č─▒ daha ├Ânceki yap─▒m a┼čamalar─▒ndan mevcut yap─▒m a┼čamas─▒na kopyalamak i├žin ├žok a┼čamal─▒ yap─▒mlarda kullan─▒yor.

dan dok├╝mantasyon

─░ste─če ba─čl─▒ olarak COPY --from=<name|index> , kaynak konumunu, kullan─▒c─▒ taraf─▒ndan g├Ânderilen bir yap─▒ ba─člam─▒ yerine kullan─▒lacak bir ├Ânceki yap─▒ a┼čamas─▒na (FROM .. AS ile olu┼čturulmu┼č) ayarlamak i├žin kullan─▒labilecek bir bayra─č─▒ kabul eder .


1


2019-08-28





 docker build -t {image name} -v {host directory}:{temp build directory} .
 

Bu, dosyalar─▒ bir g├Âr├╝nt├╝ye kopyalaman─▒n ba┼čka bir yoludur. -V se├žene─či, derleme i┼člemi s─▒ras─▒nda kulland─▒─č─▒m─▒z bir birimi ge├žici olarak olu┼čturur.

Bu, yaln─▒zca derleme i├žin bir ana bilgisayar dizini ba─člad─▒─č─▒ndan di─čer birimlerden farkl─▒d─▒r. Dosyalar standart bir cp komutu kullan─▒larak kopyalanabilir.

Ayr─▒ca, k─▒vr─▒lma ve yazma gibi, bir komut y─▒─č─▒n─▒nda ├žal─▒┼čt─▒r─▒labilir (tek bir kapta ├žal─▒┼čt─▒r─▒l─▒r) ve g├Âr├╝nt├╝ boyutunu ├žarpmaz. ADD ve COPY, istiflenebilir de─čildir, ├ž├╝nk├╝ ba─č─▒ms─▒z bir kapta ├žal─▒┼č─▒rlar ve ek kaplarda ├žal─▒┼čan bu dosyalardaki sonraki komutlar g├Âr├╝nt├╝ boyutunu ├žarpacakt─▒r:

B├Âylece ayarlanan se├ženekler ile:

 -v /opt/mysql-staging:/tvol
 

Bir konteynerde a┼ča─č─▒dakiler ├žal─▒┼čt─▒r─▒lacakt─▒r:

 RUN cp -r /tvol/mysql-5.7.15-linux-glibc2.5-x86_64 /u1 && \
    mv /u1/mysql-5.7.15-linux-glibc2.5-x86_64 /u1/mysql && \

    mkdir /u1/mysql/mysql-files && \
    mkdir /u1/mysql/innodb && \
    mkdir /u1/mysql/innodb/libdata && \
    mkdir /u1/mysql/innodb/innologs && \
    mkdir /u1/mysql/tmp && \

    chmod 750 /u1/mysql/mysql-files && \
    chown -R mysql /u1/mysql && \
    chgrp -R mysql /u1/mysql
 

0



─░lgili yay─▒nlar


Java'daki HashMap ve Map nesneleri aras─▒ndaki fark nedir?

Swift'de statik func ve s─▒n─▒f func aras─▒ndaki fark nedir?

Nesne y├Ânelimli paradigmada gev┼ček kavrama ve s─▒k─▒ kavrama aras─▒ndaki fark nedir?

Java ve C# 'daki int ile Integer aras─▒ndaki fark nedir?

Eclipse hata ay─▒klay─▒c─▒s─▒nda Step Into ile Step Over aras─▒ndaki fark nedir?

Java'daki bir Kuyruktaki ekleme ve teklif etme y├Ântemleri aras─▒ndaki fark nedir?

Dart'deki "const" ve "final" anahtar kelimeler aras─▒ndaki fark nedir?

R i├žindeki parent.frame () ve parent.env () aras─▒ndaki fark nedir; ├ža─čr─▒da referans olarak ne gibi farkl─▒l─▒klar g├Âsterir?

Bir Vue projesindeki g├Âr├╝n├╝mler ve bile┼čenler klas├Ârleri aras─▒ndaki fark nedir?

Ge├žersiz k─▒lma ve C# anahtar kelimelerindeki yeni anahtar kelimeler aras─▒ndaki fark nedir?

Etiketle ilgili di─čer sorular [docker]


Bir numaraland─▒rmak nas─▒l?

Bir alt mod├╝l├╝ nas─▒l kald─▒r─▒r─▒m?

JSON verilerini Curl ile bir terminalden / komut sat─▒r─▒ndan Test Spring REST'e nas─▒l POST yapabilirim?

ÔÇťEn K├╝├ž├╝k ┼×a┼č─▒rtmaÔÇŁ ve De─či┼čken Varsay─▒lan Arg├╝man

Git'teki taahh├╝tleri iletirken 'src refspec master' uyu┼čmuyor 'mesaj─▒

ÔÇťGit exportÔÇŁ (ÔÇťsvn exportÔÇŁ gibi) m─▒?

Bir dizgiyi float veya int'ye nas─▒l ayr─▒┼čt─▒r─▒r─▒m?

Statik s─▒n─▒f ve tekil desen aras─▒ndaki fark?

SQL Server DateTime veri t├╝r├╝nden yaln─▒zca Tarih nas─▒l d├Ând├╝r├╝l├╝r

.PHONY'─▒n makefile i├žindeki amac─▒ nedir?