Millised on parimad praktikad ADD ja COPY juhiste kasutamisel Dockeris?
sobes.tech AI
Vastus AI-lt
On mit mitmeid parimaid praktikad, mis on seotud ADD ja COPY juhistega Dockeris, mis on suunatud turvalisuse, läbipaistvuse ja ehitustõhususe parandamisele:
Peamine erinevus ADD ja COPY vahel:
COPYlihtsalt kopeerib failid ja kaustad määratud allikast konteineris sihtkohta. Allikas peab olema kohaliku failina või kaustana.ADDomab laiemat funktsionaalsust: see võib kopeerida kohalikke faile ja kaustu, samuti ekstraktida arhive (tar, gzip, bzip2) ning saada faile URL-ilt.
Parimad praktikad:
-
Eelistage
COPYADD-le: Enamasti piisabCOPY-st. See on läbipaistvam, kuna lihtsalt kopeerib kohalikud failid.ADDkasutamine arhivide ekstraktimiseks või URL-ilt allalaadimiseks võib olla vähem ennustatav ja suurendada ehituse keerukust. -
Kasutage
COPYkohalike failide jaoks: Kui peate kopeerima failid ehituse kontekstist pildile, kasutage alatiCOPY.# Selle asemel, et kasutada `ADD . /app` COPY . /app -
Ole ettevaatlik URL-idega
ADD-s:ADDURL-iga kasutamine võib ehituse stabiilsust kahjustada, kui kaugressurss pole kättesaadav. Samuti võib see olla vähem turvaline, kuna sõltute välisest allikast. Soovitatav on kasutadacurlvõiwgeteraldi kihis (RUN) ressursside allalaadimiseks URL-ilt, mis annab suurema kontrolli ja võimaldab kontrollsumma kontrolli.# Selle asemel, et kasutada `ADD http://example.com/file.tar.gz /tmp/` RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/* \ && curl -fsSL http://example.com/file.tar.gz -o /tmp/file.tar.gz \ && tar -xzf /tmp/file.tar.gz -C /app \ && rm /tmp/file.tar.gz -
Ekstraheerige arhive eraldi kihis
ADDkasutades: Kui peate kasutamaADDarhivi ekstraktimiseks (vähem levinud stsenaarium), veenduge, et teete seda eraldi kihis. Kuid nagu varem mainitud, on sageli parem kasutadaRUN-i ekstraktsioonikäskudega. -
Kopeerige ainult vajalikud failid: Ärge kopeerige kogu ehituse konteksti (
COPY . /app), kui see sisaldab tarbetuid faile (kood, testandmed, varjatud kaustad jne). Kasutage.dockerignore, et välistada need failid. See vähendab pildi suurust ja kiirendab ehitamist, vähendades Docker-ile edastatavate andmete mahtu.Näide
.dockerignore-ist:.git node_modules *.log tmp/# Kopeerige ainult vajalikud failid pärast `.dockerignore` rakendamist COPY . /app -
Kasutage absoluutseid teid sihtkoha määramiseks: Alati märkige absoluutne tee sihtkohas pildil (/app, /usr/local/bin jne). See muudab Dockerfile'i selgemaks ja ennustatavamaks, vältides ebamäärasust praeguse töökausta (
WORKDIR) osas.# Alati märkige absoluutne tee sihtkohas COPY src /app/src -
Muuda järjekorda vastavalt muutuste sagedusele: Paigutage
COPYvõiADDjuhised failidele, mis muutuvad harvemini (näiteks sõltuvusfailid nagupackage.json,requirements.txt), Dockerfile'i alguses, failidele, mis muutuvad sagedamini (rakenduse lähtekood). See võimaldab Dockeril tõhusamalt kasutada vahemälu.# Sõltuvusfailid (muutuvad harvemini) COPY requirements.txt /app/ RUN pip install --no-cache-dir -r requirements.txt # Rakenduse lähtekood (muutub sagedamini) COPY . /app/
Kokkuvõtte tabel:
| Käsk | Kirjeldus | Soovitatav kasutus | Vältida tuleks |
|---|---|---|---|
COPY |
Kopeerib kohalikud failid/direktoriumid | Kopeerida kohalikud failid ja direktoriumid pildile. | Kui vaja arhivide ekstrakti või URL-ilt allalaadimist, ärge kasutage. |
ADD |
Kopeerib kohalikud failid/direktoriumid, ekstraktib arhive, laadib URL-ilt | Kasutada arhivide automaatseks ekstraktimiseks (harva). | Kasutada ainult COPY. Kasutada URL-ilt allalaadimiseks. |
Järgides neid praktikaid, saab luua usaldusväärsemaid, turvalisemaid ja tõhusamaid Docker pilte.