Sobes.tech
Middle

Docker-ში ADD და COPY ინსტრუქციების გამოყენებისთვის საუკეთესო პრაქტიკები რა არის?

sobes.tech AI

პასუხი AI-სგან

Docker-да ADD жана COPY көрсөтмөлөрү үчүн нектелүү практикалар бар, алар коопсуздукту, ачык-айкындуулукту жана имидждерди түзүү эффективдүүлүгүн жогорулатууга багытталган:

Негизги айырмачылык ADD жана COPY ортосунда:

  • COPY жөн гана белгиленген булактан хостко файлдар жана директорийлерди көчүрөт. Булактын жергиликтүү файл же директорий болушу керек.
  • ADD кеңири мүмкүнчүлүктөргө ээ: ал жергиликтүү файлдар жана директорийлерди көчүрө алат, ошондой эле архивдерди (tar, gzip, bzip2) чыгарып, URL аркылуу файлдарды алууга болот.

Эң жакшы практикалар:

  1. ADD алдында COPY артыкчылык бериңиз: Көп учурда COPY жетиштүү. Ал көбүрөөк ачык-айкын, анткени жөн гана жергиликтүү файлдарды көчүрөт. Архивдерди чыгарып же URL аркылуу жүктөө үчүн ADD колдонуу болжолдуу эмес жана куруу процессин кыйындатышы мүмкүн.

  2. Жергиликтүү файлдар үчүн COPY колдонуңуз: Эгер куруу контекстинен образга файлдарды көчүрүү керек болсо, ар дайым COPY колдонуңуз.

    # `ADD . /app` ордуна
    COPY . /app 
    
  3. ADD менен URL колдонууда этият болуңуз: ADD менен URL колдонуу куруу процесси үчүн туруктуулукту жоготушу мүмкүн, эгер ал алыстагы ресурс жеткиликтүү болбосо. Ошондой эле, бул коопсуздукту төмөндөтүшү мүмкүн, анткени сырттан көз карандылык бар. URL аркылуу ресурстарды жүктөө үчүн curl же wget колдонуу жакшыраак, ал көзөмөлдү күчөтүп, текшерүүнү жүргүзүүгө мүмкүндүк берет.

    # `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. ADD колдонууда архивдерди бөлүнгөн катарда чыгарыңыз: Эгер ADD менен архив чыгарышы керек болсо (азыркы учурда сейрек кездешет), аны бөлүнгөн катарда жасоо керек. Бирок, алдын ала айтылгандай, RUN аркылуу түздөн-түз чыгарып алуу көбүрөөк артыкчылыкка ээ.

  5. Керек болгон файлдар гана көчүрүңүз: Бардык куруу контекстин көчүрбөңүз (COPY . /app), эгерде анда керексиз файлдар болсо (код, тест маалыматтары, жашырынган директорийлер жана башка). .dockerignore колдонуп, бул файлдарды чыгарып салыңыз. Бул образдын өлчөмүн кыскартат жана Docker-дин жүктөө көлөмүн азайтат.

    Мисал .dockerignore:

    .git
    node_modules
    *.log
    tmp/
    
    # `.dockerignore` колдонулгандан кийин керектүү файлдарды гана көчүрүңүз
    COPY . /app
    
  6. Максималдуу жолдорду көрсөтүңүз: Ар дайым абсолюттук жолду көрсөтүңүз (/app, /usr/local/bin жана башка). Бул Dockerfile'ди түшүнүктүү жана алдын ала болуучу кылат, иштөө учурдагы каталогду (WORKDIR) так аныктоо менен байланыштуу маселелерден сактайт.

    # Абсолюттук жолду көрсөтүңүз
    COPY src /app/src
    
  7. Кайталануучу өзгөрүүлөргө ылайык тартипти өзгөртүңүз: COPY же ADD көрсөтмөлөрүн, өзгөрүүчү файлдарга карата, алардын өзгөрүү ыкчамдыгына жараша жайгаштырыңыз (мисалы, package.json, requirements.txt сыяктуу туташтырылган файлдар жогору). Бул Docker-га катмарларды эффективдүү кэшдөөгө мүмкүндүк берет.

    # Туташтырылган файлдар (азыркы учурда аз өзгөрөт)
    COPY requirements.txt /app/
    RUN pip install --no-cache-dir -r requirements.txt
    
    # Көп өзгөрүүчү код
    COPY . /app/ 
    

Аңдатпа таблица:

көрсөтмө сүрөттөмө сунушталган колдонуу качуу керек болгон нерсе
COPY Жергиликтүү файлдар/директорийлерди көчүрөт Жергиликтүү файлдар жана директорийлерди образга көчүрүү. Архивдерди чыгарып же URL аркылуу жүктөө керек болсо колдонбоңуз.
ADD Жергиликтүү файлдар/директорийлерди көчүрөт, архивдерди чыгара алат, URL аркылуу жүктөй алат Архивдерди автоматтык чыгарып алуу үчүн колдонуу (азыркы учурда сейрек кездешет). Жергиликтүү файлдарды көчүрүү үчүн колдонбоңуз (префер COPY). URL аркылуу жүктөө үчүн колдонбоңуз.

Бул практикалар Docker образдарын ишенимдүү, коопсуз жана эффективдүү кылууга жардам берет.