Izpratne par atšķirībām starp komandām "COPY" un "ADD" Docker failā

Dockerfile

Izskaidrotas Dockerfile komandas

Komandas “COPY” un “ADD” failā Dockerfile kalpo failu ievadīšanai konteinera failu sistēmā, taču tām ir atšķirīgas funkcijas un vislabāk lietojamie scenāriji. Šo atšķirību izpratne ir būtiska efektīvai Dockerfile pārvaldībai un jūsu konteinerizēto lietojumprogrammu darbības nodrošināšanai, kā paredzēts.

Lai gan “COPY” galvenokārt tiek izmantota vienkāršai failu kopēšanai, “ADD” piedāvā papildu iespējas, piemēram, attālo vietrāžu URL apstrādi un saspiestu failu izvilkšanu. Šajā rakstā tiks izpētītas katras komandas nianses, norādot, kad izmantot vienu pār otru, lai optimizētu Docker būvējumus.

Pavēli Apraksts
FROM Norāda bāzes attēlu, kas jāizmanto Docker attēlam, kas tiek veidots.
WORKDIR Iestata darba direktoriju konteinera iekšpusē.
COPY Kopē failus vai direktorijus no resursdatora uz konteinera failu sistēmu.
ADD Pievieno failus, direktorijus vai attālos vietrāžus URL konteinera failu sistēmai un var apstrādāt failu izvilkšanu.
RUN Izpilda komandu konteinera vidē.
EXPOSE Informē Docker, ka konteiners izpildes laikā klausās norādītajos tīkla portos.

Detalizēts Dockerfile komandu skaidrojums

Pirmais skripts parāda komanda Dockerfile. The instrukcija ir vienkārša un tiek izmantota, lai kopētu failus vai direktorijus no resursdatora sistēmas Docker konteinera failu sistēmā. Šajā piemērā skripts sākas ar komanda, kas norāda pamata attēlu kā python:3.8-slim-buster . The komanda iestata darba direktoriju konteinerā uz . Tam seko komanda, kas kopē pašreizējā resursdatora direktorija saturu uz /app direktoriju konteinerā. Pēc failu kopēšanas, komanda tiek izmantota, lai instalētu nepieciešamās Python pakotnes, kas norādītas failu. Visbeidzot, komanda padara 80. portu pieejamu ārpasaulei.

Turpretim otrais skripts izceļ komanda Dockerfile. Līdzīgi kā pirmais skripts, tas sākas ar komanda, lai iestatītu pamata attēlu un komandu, lai definētu darba direktoriju. Galvenā atšķirība šeit ir ADD komanda, kas tiek izmantota, lai pievienotu failus no attālā URL, šajā gadījumā . The komanda ne tikai kopē failus, bet arī spēj automātiski izvilkt saspiestos failus, kā parādīts nākamajā komanda, kas izvelk archive.tar.gz failu iekšā direktoriju. Pēc tam, komanda instalē vajadzīgās Python pakotnes un komanda padara pieejamu portu 80.

COPY izmantošana Docker failā

Dockerfile piemērs

# 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

ADD izmantošana Docker failā

Dockerfile piemērs

# 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

COPY un ADD padziļināta analīze pakalpojumā Dockerfile

Kamēr abi un komandas kalpo failu kopēšanai no resursdatora sistēmas uz konteinera failu sistēmu, tām ir atšķirīgas funkcijas un lietošanas gadījumi, kas padara katru piemērotu dažādos scenārijos. The komanda ir vienkāršāka un paredzamāka. To vislabāk izmantot pamata failu kopēšanai, ja nav nepieciešama papildu apstrāde, piemēram, arhīvu izvilkšana vai attālo failu ielāde. Šī komanda nodrošina, ka konteinerā tiek kopēti tikai vietējie faili un direktoriji, tādējādi saglabājot tīru un drošu būvēšanas vidi.

No otras puses, komanda nodrošina vairāk funkcionalitātes, taču ar papildu sarežģītību un iespējamiem drošības riskiem. The komanda var apstrādāt URL lejupielādes un automātiski izvilkt saspiestus failus, piemēram, , .gzip, un . Tas var būt noderīgi gadījumos, kad jūsu veidošanas procesā ir nepieciešami attāli līdzekļi vai arhīvi, kas ir jāizņem attēla izveides laikā. Tomēr šīs papildu funkcijas ir saistītas ar riskiem, piemēram, netīšu failu pārrakstīšanu un drošības ievainojamību, lejupielādējot no attālām vietām. Tāpēc ir ļoti svarīgi rūpīgi apsvērt šos faktorus, pieņemot lēmumu starp un .

Bieži uzdotie jautājumi un atbildes par KOPĒŠANU un PIEVIENOT pakalpojumā Dockerfile

  1. Kāds ir primārais lietojums komanda Dockerfile?
  2. The komanda galvenokārt tiek izmantota vietējo failu un direktoriju kopēšanai no resursdatora sistēmas Docker konteinerā.
  3. Kad jums vajadzētu izmantot komandu vietā ?
  4. Jums vajadzētu izmantot komandu, ja jums ir nepieciešams kopēt failus no URL vai kad jums ir jāizņem saspiesti faili veidošanas procesa laikā.
  5. Kādas ir drošības sekas, izmantojot komanda?
  6. The komanda var radīt drošības riskus, jo īpaši, lejupielādējot failus no attāliem URL, jo tā var pārrakstīt esošos failus vai ieviest ievainojamības.
  7. Vai var komanda izvilkt saspiestos failus?
  8. Nē, komandai nav iespēju izvilkt saspiestus failus; tas vienkārši kopē tos tādus, kādi tie ir.
  9. Kā apstrādājiet saspiestos failus savādāk nekā ?
  10. The komanda automātiski izvelk saspiestus failus, piemēram, , , un .bzip2 kad tos pievieno traukā.
  11. Vai ir iespējams izmantot aizstājējzīmes ar komanda?
  12. Jā, jūs varat izmantot aizstājējzīmes ar komandu, lai kopētu vairākus failus vai direktorijus, kas atbilst paraugam.
  13. Kas notiek, ja URL tiek norādīts uz komanda nav sasniedzama?
  14. Ja URL ir norādīts uz komanda nav sasniedzama, Docker veidošanas process neizdosies.
  15. Kura komanda jāizmanto vienkāršai lokālai failu kopēšanas darbībai?
  16. Vienkāršām lokālām failu kopēšanas darbībām izmantojiet komandu, jo tā ir vienkāršāka un drošāka.
  17. Vai var komanda tiek izmantota, lai pievienotu failus gan no vietējiem, gan attāliem avotiem?
  18. Jā, komanda var pievienot failus gan no vietējiem avotiem, gan attāliem URL, padarot to daudzpusīgāku noteiktos scenārijos.

Izpratne, kad lietot un jūsu Dockerfile ir būtiska, lai optimizētu konteineru būvējumus. Kamēr ir vienkārša un droša vietējiem failiem, ADD nodrošina papildu iespējas uz papildu sarežģītības un iespējamām drošības problēmām. Izvēloties pareizo komandu, pamatojoties uz jūsu īpašajām vajadzībām, var uzlabot jūsu Docker attēlu efektivitāti un drošību.