„COPY“ ir „ADD“ komandų skirtumų supratimas „Docker“ faile

„COPY“ ir „ADD“ komandų skirtumų supratimas „Docker“ faile
„COPY“ ir „ADD“ komandų skirtumų supratimas „Docker“ faile

Paaiškintos „Dockerfile“ komandos

Komandos „COPY“ ir „ADD“ „Dockerfile“ yra skirtos failams įterpti į jūsų sudėtinio rodinio failų sistemą, tačiau jos turi skirtingas funkcijas ir geriausio naudojimo scenarijus. Norint efektyviai valdyti „Dockerfile“ ir užtikrinti, kad konteinerinės programos veiktų taip, kaip tikėtasi, būtina suprasti šiuos skirtumus.

Nors „COPY“ pirmiausia naudojama paprastam failų kopijavimui, „ADD“ siūlo papildomų galimybių, pvz., tvarkyti nuotolinius URL ir išgauti suspaustus failus. Šiame straipsnyje bus nagrinėjami kiekvienos komandos niuansai ir nurodoma, kada naudoti vieną prieš kitą, kad optimizuotumėte „Docker“ versijas.

komandą apibūdinimas
FROM Nurodo pagrindinį vaizdą, kuris bus naudojamas kuriamam Docker vaizdui.
WORKDIR Nustato darbo katalogą konteinerio viduje.
COPY Kopijuoja failus arba katalogus iš pagrindinio kompiuterio į konteinerio failų sistemą.
ADD Prideda failus, katalogus arba nuotolinius URL prie sudėtinio rodinio failų sistemos ir gali tvarkyti failų ištraukimą.
RUN Vykdo komandą konteinerio aplinkoje.
EXPOSE Informuoja Docker, kad konteineris klausosi nurodytų tinklo prievadų vykdymo metu.

Išsamus Dockerfile komandų paaiškinimas

Pirmasis scenarijus parodo, kaip naudojamas COPY komanda Dockerfile. The COPY instrukcija yra paprasta ir naudojama failams arba katalogams kopijuoti iš pagrindinės sistemos į Docker konteinerio failų sistemą. Šiame pavyzdyje scenarijus prasideda FROM komanda, kuri nurodo pagrindinį vaizdą kaip python:3.8-slim-buster . The WORKDIR komanda nustato darbo katalogą konteinerio viduje į /app . Po to seka COPY komanda, kuri nukopijuoja dabartinio pagrindinio kompiuterio katalogo turinį į /app katalogą konteineryje. Nukopijavus failus, RUN komanda naudojama norint įdiegti būtinus Python paketus, nurodytus requirements.txt failą. Galiausiai, EXPOSE komanda padaro 80 prievadą prieinamą išoriniam pasauliui.

Priešingai, antrasis scenarijus pabrėžia naudojimą ADD komanda Dockerfile. Panašiai kaip ir pirmasis scenarijus, jis prasideda FROM komanda nustatyti pagrindinį vaizdą ir WORKDIR komandą darbo katalogui apibrėžti. Pagrindinis skirtumas čia yra ADD komanda, kuri naudojama failams pridėti iš nuotolinio URL, šiuo atveju, https://example.com/data/archive.tar.gz . The ADD komanda ne tik kopijuoja failus, bet ir turi galimybę automatiškai išgauti suglaudintus failus, kaip parodyta toliau RUN komanda, kuri ištraukia archive.tar.gz failą į /app katalogas. Po to, RUN komanda įdiegia reikiamus Python paketus ir EXPOSE komanda padaro prieinamą 80 prievadą.

COPY naudojimas Docker faile

Dockerfile pavyzdys

# 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 naudojimas Dockerfile

Dockerfile pavyzdys

# 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

Išsami COPY ir ADD analizė Dockerfile

Nors abu COPY ir ADD komandos yra skirtos kopijuoti failus iš pagrindinės sistemos į konteinerio failų sistemą, jos turi skirtingas funkcijas ir naudojimo atvejus, dėl kurių kiekviena tinka įvairiems scenarijams. The COPY komanda yra paprastesnė ir labiau nuspėjama. Jį geriausia naudoti pagrindiniam failų kopijavimui, kai nereikia papildomo apdorojimo, pvz., archyvų išskleidimo ar nuotolinių failų gavimo. Ši komanda užtikrina, kad į konteinerį būtų nukopijuoti tik vietiniai failai ir katalogai, taip išlaikoma švari ir saugi kūrimo aplinka.

Kita vertus, ADD komanda suteikia daugiau funkcijų, tačiau yra sudėtingesnė ir galimos saugumo rizikos. The ADD komanda gali tvarkyti URL atsisiuntimus ir automatiškai išgauti suglaudintus failus, pvz .tar, .gzip, ir .bzip2. Tai gali būti naudinga tais atvejais, kai kūrimo procesui reikalingi nuotoliniai ištekliai arba archyvai, kuriuos reikia išgauti kuriant vaizdą. Tačiau šios papildomos funkcijos yra susijusios su rizika, pvz., netyčiniu failų perrašymu ir saugos pažeidžiamumu atsisiunčiant iš atokių vietų. Todėl, sprendžiant tarp jų, labai svarbu atidžiai apsvarstyti šiuos veiksnius COPY ir ADD.

Dažni klausimai ir atsakymai apie COPY ir ADD programoje Dockerfile

  1. Koks yra pagrindinis naudojimas COPY komanda Dockerfile?
  2. The COPY komanda pirmiausia naudojama vietiniams failams ir katalogams kopijuoti iš pagrindinės sistemos į Docker konteinerį.
  3. Kada turėtumėte naudoti ADD komandą vietoj COPY?
  4. Turėtumėte naudoti ADD komanda, kai reikia nukopijuoti failus iš URL arba kai reikia išgauti suglaudintus failus kūrimo proceso metu.
  5. Kokie yra saugumo padariniai naudojant ADD komandą?
  6. The ADD komanda gali sukelti saugumo pavojų, ypač atsisiunčiant failus iš nuotolinių URL, nes gali perrašyti esamus failus arba atsirasti pažeidžiamumų.
  7. Ar gali COPY komanda ištraukti suspaustus failus?
  8. Ne, COPY komanda negali išgauti suglaudintų failų; tiesiog nukopijuoja juos tokius, kokie jie yra.
  9. Kaip ADD tvarkyti suglaudintus failus kitaip nei COPY?
  10. The ADD komanda automatiškai ištraukia suglaudintus failus, pvz .tar, .gzip, ir .bzip2 kai jie dedami į talpyklą.
  11. Ar galima naudoti pakaitos simbolius su COPY komandą?
  12. Taip, galite naudoti pakaitos simbolius su COPY komanda, norėdami nukopijuoti kelis failus ar katalogus, atitinkančius šabloną.
  13. Kas atsitiks, jei URL pateikiamas į ADD komanda nepasiekiama?
  14. Jei URL pateiktas į ADD komanda nepasiekiama, „Docker“ kūrimo procesas nepavyks.
  15. Kurią komandą turėtumėte naudoti atliekant paprastą vietinio failo kopijavimo operaciją?
  16. Norėdami atlikti paprastas vietinių failų kopijavimo operacijas, turėtumėte naudoti COPY komandą, nes ji yra paprastesnė ir saugesnė.
  17. Ar gali ADD komanda gali būti naudojama failams pridėti iš vietinių ir nuotolinių šaltinių?
  18. Taip, ADD komanda gali pridėti failus tiek iš vietinių šaltinių, tiek iš nuotolinių URL, todėl tam tikrais atvejais ji tampa universalesnė.

„Docker“ užbaigimas COPY ir ADD komandos

Supratimas, kada naudoti COPY ir ADDDockerfile“ yra būtinas norint optimizuoti sudėtinio rodinio kūrimą. Nors COPY yra paprasta ir saugi vietiniams failams, ADD suteikia papildomų galimybių dėl papildomo sudėtingumo ir galimų saugumo problemų. Pasirinkę tinkamą komandą pagal konkrečius poreikius, galite padidinti „Docker“ vaizdų efektyvumą ir saugumą.