Sobes.tech
Middle

Docker-də ADD və COPY təlimatlarından istifadə üçün ən yaxşı təcrübələr hansılardır?

sobes.tech Süni İntellekt

AI-dan cavab

Docker-də ADDCOPY əmrləri üçün bir neçə ən yaxşı təcrübə mövcuddur ki, bunlar təhlükəsizliyi, şəffaflığı və görüntü quruluşunun səmərəliliyini artırmağa yönəlib.

ADDCOPY arasındakı əsas fərq:

  • COPY sadəcə olaraq faylları və qovluqları göstərilən mənbədən konteynerdə göstərilən yerə köçürür. Mənbə yerli fayl və ya qovluq olmalıdır.
  • ADD daha geniş imkanlara malikdir: o, yerli faylları və qovluqları köçürə bilər, həmçinin arxivləri (tar, gzip, bzip2) çıxara və URL-dən faylları yükləyə bilər.

Ən yaxşı təcrübələr:

  1. ADD yerinə COPY istifadə edin: Əksər hallarda COPY kifayət edir. Bu, daha şəffafdır, çünki sadəcə yerli faylları köçürür. Arxivlərin çıxarılması və ya URL-dən yükləmə üçün ADD istifadə etmək daha az proqnozlaşdırıla bilər və quruluşu çətinləşdirə bilər.

  2. Yerli fayllar üçün COPY istifadə edin: Əgər quruluş kontekstindən imicə faylları köçürmək istəyirsinizsə, həmişə COPY istifadə edin.

    # `ADD` yerinə . /app istifadə edin
    COPY . /app 
    
  3. ADD içində URL-lərə diqqətlə yanaşın: ADD ilə URL istifadə etmək, uzaq resurs əlçatan olmadıqda quruluşun stabilliyini poza bilər. Bu, həmçinin daha az təhlükəsiz ola bilər, çünki xarici mənbəyə bağlıdır. Resursları URL-dən yükləmək üçün curl və ya wget istifadə etmək tövsiyə olunur, bu da daha çox nəzarət və yoxlama imkanı verir.

    # `ADD` yerinə http://example.com/file.tar.gz /tmp/ istifadə edin
    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. Arxivləri ADD ilə çıxararkən, onları ayrıca qatda çıxarın: Əgər ADD istifadə etməlisinizsə, arxiv çıxarışını ayrıca qatda etmək daha yaxşıdır. Lakin, əvvəlki kimi, RUN ilə açıq çıxarış daha üstün ola bilər.

  5. Yalnız lazım olan faylları köçürün: Bütün quruluş kontekstini (COPY . /app) köçürməyin, əgər içində lazım olmayan fayllar (məsələn, mənbə kodu, test məlumatları, gizli qovluqlar və s.) varsa. Bu, imicin ölçüsünü azaldır və quruluşu sürətləndirir, çünki Docker-ə göndərilən məlumatların həcmini azaldır.

    .dockerignore nümunəsi:

    .git
    node_modules
    *.log
    tmp/
    
    # `.dockerignore` tətbiq etdikdən sonra yalnız lazım olan faylları köçürürük
    COPY . /app
    
  6. Hədəf üçün mütləq yollar istifadə edin: Həmişə konteynerdə mütləq yol göstərin (/app, /usr/local/bin və s.). Bu, Dockerfile-i daha aydın və proqnozlaşdırıla bilən edir və cari iş qovluğunun (WORKDIR) qeyri-müəyyənliyindən qaçınır.

    # Həmişə mütləq yol göstərin
    COPY src /app/src
    
  7. Dəyişiklik tezliyinə görə sıralama ilə dəyişin: COPY və ya ADD əmrlərini daha az dəyişən fayllar üçün (məsələn, package.json, requirements.txt) Dockerfile-in yuxarısında yerləşdirin, daha çox dəyişən fayllar üçün (məsələn, tətbiqin mənbə kodu) aşağıda yerləşdirin. Bu, Docker-ın keşi effektiv istifadə etməsinə imkan verir.

    # Daha az dəyişən asılılıq faylları
    COPY requirements.txt /app/
    RUN pip install --no-cache-dir -r requirements.txt
    
    # Daha çox dəyişən tətbiq mənbə kodu
    COPY . /app/ 
    

Xülasə cədvəli:

Əmr Təsviri Tövsiyə olunan istifadə Nədən qaçınmaq lazımdır
COPY Yerli faylları/directories köçürür Yerli faylları və directories-i imicə köçürmək üçün Arxivləri çıxarmaq və ya URL-dən yükləmək üçün istifadə etməyin
ADD Yerli faylları/directories köçürür, arxivləri çıxarır, URL-dən yükləyir Arxivlərin avtomatik çıxarılması üçün istifadə (nadir hallarda) Yerli faylları köçürmək üçün istifadə etməyin (COPY üstünlükdür). URL-dən yükləmək üçün istifadə etməyin

Bu təcrübələrə riayət etmək, daha etibarlı, təhlükəsiz və səmərəli Docker imicləri yaratmağa kömək edir.