Sobes.tech
Middle

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:

  • COPY lihtsalt kopeerib failid ja kaustad määratud allikast konteineris sihtkohta. Allikas peab olema kohaliku failina või kaustana.
  • ADD omab laiemat funktsionaalsust: see võib kopeerida kohalikke faile ja kaustu, samuti ekstraktida arhive (tar, gzip, bzip2) ning saada faile URL-ilt.

Parimad praktikad:

  1. Eelistage COPY ADD-le: Enamasti piisab COPY-st. See on läbipaistvam, kuna lihtsalt kopeerib kohalikud failid. ADD kasutamine arhivide ekstraktimiseks või URL-ilt allalaadimiseks võib olla vähem ennustatav ja suurendada ehituse keerukust.

  2. Kasutage COPY kohalike failide jaoks: Kui peate kopeerima failid ehituse kontekstist pildile, kasutage alati COPY.

    # Selle asemel, et kasutada `ADD . /app`
    COPY . /app 
    
  3. Ole ettevaatlik URL-idega ADD-s: ADD URL-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 kasutada curl või wget eraldi 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
    
  4. Ekstraheerige arhive eraldi kihis ADD kasutades: Kui peate kasutama ADD arhivi ekstraktimiseks (vähem levinud stsenaarium), veenduge, et teete seda eraldi kihis. Kuid nagu varem mainitud, on sageli parem kasutada RUN-i ekstraktsioonikäskudega.

  5. 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
    
  6. 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
    
  7. Muuda järjekorda vastavalt muutuste sagedusele: Paigutage COPY või ADD juhised failidele, mis muutuvad harvemini (näiteks sõltuvusfailid nagu package.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.