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ə ADD və COPY ə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.
ADD və COPY arasındakı əsas fərq:
COPYsadə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.ADDdaha 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:
-
ADDyerinəCOPYistifadə edin: Əksər hallardaCOPYkifayə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ə üçünADDistifadə etmək daha az proqnozlaşdırıla bilər və quruluşu çətinləşdirə bilər. -
Yerli fayllar üçün
COPYistifadə edin: Əgər quruluş kontekstindən imicə faylları köçürmək istəyirsinizsə, həmişəCOPYistifadə edin.# `ADD` yerinə . /app istifadə edin COPY . /app -
ADDiçində URL-lərə diqqətlə yanaşın:ADDilə 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 üçüncurlvə yawgetistifadə 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 -
Arxivləri
ADDilə çıxararkən, onları ayrıca qatda çıxarın: ƏgərADDistifadə etməlisinizsə, arxiv çıxarışını ayrıca qatda etmək daha yaxşıdır. Lakin, əvvəlki kimi,RUNilə açıq çıxarış daha üstün ola bilər. -
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..dockerignorenü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 -
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 -
Dəyişiklik tezliyinə görə sıralama ilə dəyişin:
COPYvə yaADDə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.